前言
今天学习了OpenCV里一些滤波的用法,感觉获益颇深,尤其是其中的双边滤波,完全可以达到磨皮的效果,原来还很纠结要如何实现磨皮美白,原来双边滤波就行了,当然如果要保留一些细节的话可能还需要用其他函数。
废话不说,上代码:
#include <opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
Mat g_srcImage, g_dstImage5;
int g_nBilateralFilterValue = 15; //双边滤波参数值,不同数值效果不一样
int main()
{
VideoCapture capture(0); //从摄像头中获取图像
while (1)
{
if (char(waitKey(1)) == 'q') break; //长按1ms q键退出;
capture >> g_srcImage;
if (!g_srcImage.data) { printf("Oh,no,读取srcImage错误~!\n"); return false; }
g_dstImage5 = g_srcImage.clone();
//显示原图
namedWindow("原图窗口", 1);
imshow("原图窗口", g_srcImage);
namedWindow("双边滤波", 1);
bilateralFilter(g_srcImage, g_dstImage5, g_nBilateralFilterValue, g_nBilateralFilterValue * 2, g_nBilateralFilterValue / 2);
imshow("双边滤波", g_dstImage5);
waitKey(