原理:
图像模糊又称为图像平滑,是图像处理中最简单和常用的操作之一,使用该操作就是为了给图像降低噪音。图像模糊处理包括:高斯模糊、均值滤波、中值滤波、双边滤波等。模糊滤波其实就是图像的卷积计算,通常这些卷积算子都是线性计算,所以又叫线性滤波。
链接:【OpenCv】图像模糊处理(滤波)
1.均值滤波:
将黄色卷积核覆盖的9个像素值求平均值代替红色方框位置的像素值。
blur(src,dst,size(x,y),point(-1,-1));
Size:(用于平滑操作的核的大小)
Size(1, 15); //y方向模糊运动
point默认参数值为(-1,-1)代表将均值赋给卷积核的中间位置。
2.高斯滤波:
参考:高斯滤波器详解,三种模糊操作
//均值滤波,高斯滤波(避免本身很大,旁边很小,然后就总体变小;正太分布,权重分配)#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(int argc, char** argv){Mat src, src2, dst;src = imread("D:/PT/stone.jpg");if (!src.data) {printf("could not load image...\n");return -1;}double scale = 0.5;Size dsize = Size(src.cols * scale, src.rows * scale);//Mat src2 = Mat(dsize, CV_32S);resize(src, src2, dsize);char input[] = "input image";char output[] = "output image";namedWindow(input, CV_WINDOW_AUTOSIZE);namedWindow(output, CV_WINDOW_AUTOSIZE);namedWindow("output_Gaussian", CV_WINDOW_AUTOSIZE);imshow(input, src2);blur(src2, dst, Size(5, 5), Point(-1, -1));//Size(1, 15);//y方向模糊运动//Size:(用于平滑操作的核的大小)//Point:(锚点,默认值为Point(-1,-1)表示锚点在核的中心)imshow(output, dst);Mat dst2;GaussianBlur(src2, dst2, Size(5, 5), 11, 11);imshow("output_Gaussian", dst2);waitKey(0);return 0;}
3.中值滤波:
取中位数;
对去椒盐噪声有很好的效果!为什么可以去除椒盐噪声呢?因为椒盐噪声像素值要么很小为0,要么很大为255,而取中间值话,就会用替代这些,从而给图像去噪点。
medianBlur(src, dst, 5);
中值模糊的ksize大小必须是大于1而且必须是奇数。
4.双边滤波:
链接:OpenCV双边滤波详解及实代码实现
bilateralFilter(dst, dst2, 15, 100, 3);15 –计算的半径,半径之内的像数都会被纳入计算,如果提供-1 则根据sigma space参数取值-150 – sigma color 决定多少差值之内的像素会被计算3 – sigma space 如果d的值大于0则声明无效,否则根据它来计算d值
注:因为之前一直要缩放图片,所以很不方便,索性写到这里吧:
double scale = 0.5;Size dsize = Size(src.cols * scale, src.rows * scale);//Mat src2 = Mat(dsize, CV_32S);resize(src, dst, dsize);
需要注意的是缩小后再发放大会变模糊: