【OpenCv】图像模糊(均值模糊,高斯模糊,中值模糊,双边模糊)

原理:

图像模糊又称为图像平滑,是图像处理中最简单和常用的操作之一,使用该操作就是为了给图像降低噪音。图像模糊处理包括:高斯模糊、均值滤波、中值滤波、双边滤波等。模糊滤波其实就是图像的卷积计算,通常这些卷积算子都是线性计算,所以又叫线性滤波。
链接:【OpenCv】图像模糊处理(滤波)
【OpenCv】图像模糊(均值模糊,高斯模糊,中值模糊,双边模糊)_第1张图片

1. 均值滤波:
将黄色卷积核覆盖的9个像素值求平均值代替红色方框位置的像素值。
blur(src,dst,size(x,y),point(-1,-1));
Size:(用于平滑操作的核的大小)
Size(1, 15); //y方向模糊运动
point默认参数值为(-1,-1)代表将均值赋给卷积核的中间位置。

2. 高斯滤波:
参考:高斯滤波器详解,三种模糊操作
在这里插入图片描述

//均值滤波,高斯滤波(避免本身很大,旁边很小,然后就总体变小;正太分布,权重分配)
#include 
#include 

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);

【OpenCv】图像模糊(均值模糊,高斯模糊,中值模糊,双边模糊)_第2张图片

中值模糊的ksize大小必须是大于1而且必须是奇数。

4. 双边滤波:
链接:OpenCV双边滤波详解及实代码实现

	bilateralFilter(dst, dst2, 15, 100, 3);
	15 –计算的半径,半径之内的像数都会被纳入计算,如果提供-1 则根据sigma space参数取值
	-150 – sigma color 决定多少差值之内的像素会被计算
 	3 – sigma space 如果d的值大于0则声明无效,否则根据它来计算d值


【OpenCv】图像模糊(均值模糊,高斯模糊,中值模糊,双边模糊)_第3张图片
:因为之前一直要缩放图片,所以很不方便,索性写到这里吧:

	double scale = 0.5;
	Size dsize = Size(src.cols * scale, src.rows * scale);
	//Mat src2 = Mat(dsize, CV_32S);
	resize(src, dst, dsize);

需要注意的是缩小后再发放大会变模糊:

你可能感兴趣的:(opencv,opencv)