2020.10.31 使用OpenCV进行图像模糊 【OpenCV C++】
去除图像噪声
1.均值滤波
2.中值滤波(还有最小,最大值滤波)
3.高斯滤波
4.双边滤波
(起到一种模糊的作用)
具体采用哪一种滤波手段,需要根据自己对图像后续的处理要求有关,然后选择合适的图像预处理滤波方法。
源代码:
// testOpencv08.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main()
{
//std::cout << "Hello World!\n";
Mat src, dst;
const char* inputWindow = "input image";
const char* outputWindow = "output image";
src = imread("E:/imageSources/7.jpg");
if (!src.data) {
printf("can not load image");
return -1;
}
namedWindow(inputWindow,WINDOW_AUTOSIZE);
imshow(inputWindow,src);
Mat kernal = (Mat_<int>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
Mat result;
//均值滤波(平滑噪声)
//SIZE的大小选择为奇数(因为需要一个单着的像素)
//blur(src,dst,Size(25,1),Point(-1,-1));
//高斯滤波
//GaussianBlur(src,dst,Size(25,1),11,11);
//中值滤波
//medianBlur(src,dst,3);
//高斯双边滤波
//120处理阈值
bilateralFilter(src, dst, 5, 120, 3);
namedWindow(outputWindow, WINDOW_AUTOSIZE);
imshow(outputWindow, dst);
filter2D(dst, result, -1, kernal, Point(-1, -1), 0);
imshow("yanmo image", result);
waitKey(0);
return 0;
}
采用双边模糊,再用掩膜处理图像结果:
可以看到经过双边处理(双边模糊会保护边缘信息)后,再用掩膜处理,将边缘信息更加凸显出来。人物轮廓更加凸显出来,脸部立体感更强了。