基于OpenCV双边滤波器的人脸美化 .

来源:互联网 发布:哪些端口不是敏感端口 编辑:程序博客网 时间:2024/04/24 22:43
人像美化类软件中通常会提供一个磨皮功能,可以使得皮肤变得柔和,去除痘痘和斑点。本文基于OpenCV中的双向滤波器实现了一个简单的人脸美化功能。

       双边滤波,Bilateral filter,是一种保持边缘的降噪平滑滤波器。注意两点,第一是保持边缘,这样对于人脸而言,可以在平滑皮肤区域的同时不破坏五官的边缘结构。第二,降噪平滑,这样就可以抑制皮肤上的斑点和痘痘,使得皮肤变得柔和。Bilateral filter同时利用了中心像素与周围像素在空间上和颜色强度上的差异,具体可参考这个链接:点击打开链接。

       OpenCV中的cvSmooth功能支持双边滤波功能,调用格式为:

       cvSmooth(const CvArr* src, CvArr* dst, int smoothtype=CV_BILATERAL, int size1=3, int size2=0, double    sigma1=0, double sigma2=0)。 其中要使用双边滤波功能,需指定size1,size3和size4三个参数,分别对应窗口大小size1*size1, color sigma和spatical sigma.

       需要特别提醒的是,OpenCV中的Bilateral filater不支持原址运算,也就是说src和dst必须指定为不同的图像,如果指定为同一副图像,华丽丽的会出现运行时崩溃。

        下图为一副网络图片:

        

       使用OpenCV中的双边滤波器进行处理,注意需要用cvCreateImage创建一副size、depth和channel与源图像相同的图像,参数设置size1=7,size2=0(无效参数),size3=70,size4=10,滤波结果为:

         

          效果还是挺明显的。

原创粉丝点击