掌握

1、模糊原理;
2、代码;

模糊原理

1、Smooth/Blur(光滑/模糊)是图像处理中最常用的操作之一,用于去噪;
2、使用该操作一般是给图像预处理降低噪声影响;
3、Smooth/Blur背后是数学的卷积运算(图像处理中将数学连续运算转换为离散运算):使用卷积算子(掩膜mask);
4、通常这些卷积算子计算都是线性操作,所以又叫线性滤波;

注:k,l:窗口大小,f(x,y):原始图像,h(i,j):为卷积算子;g(x,y):输出图像;(卷积算子与原始图像相乘后赋值给原始图像中心像素)

5、3 * 3卷积边缘有1个像素无法处理;5 * 5卷积边缘有2个像素无法处理;7 * 7卷积边缘有3个像素无法处理,OpenCV提供了特殊方法对边缘进行处理;

均值滤波

所有像素点取相同权重:

高斯滤波

考虑不同像素点取不同权重
A为归一化系数

相关API

1、均值模糊API

//均值模糊API
//Size(xradius,yradius) 代表卷积算子大小(窗口大小)(3*3...)
//Point(-1,-1) 代表对像素中心点进行卷积
blur(Mat src , Mat dst ,Size(xradius,yradius) ,Point(-1,-1));

2、高斯模糊API
Size() : 窗口大小,卷积算子大小,必须为正数且为奇数
sigmax : 高斯函数的系数;
sigmay : 高斯函数的系数;

Demo

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
   
	Mat src, dst;
	src = imread("C:\\Users\\hello\\Desktop\\2.jpg");
	if (!src.data)
	{
   
		cout << "could not load the image..." << endl;
		return -1;
	}
	const char* input_title = "input image";
	const char* output_title = "均值模糊";
	namedWindow(input_title, CV_WINDOW_AUTOSIZE);
	namedWindow(output_title, CV_WINDOW_AUTOSIZE);

	imshow(input_title, src);
	//卷积应该选择奇数,也可以单独设置X/Y方向的模糊
	//filter2D()函数也可以做卷积,只是需要单独定义卷积
	//blur(src, dst, Size(3, 3), Point(-1, -1)); //3 * 3 均值模糊--最常见
	//blur(src, dst,Size(15,1), Point(-1, -1)); //x方向模糊
	
	blur(src, dst,Size(11,11), Point(-1, -1)); //模糊
	imshow(output_title, dst);
	
	Mat gaussmat;
	GaussianBlur(src, gaussmat, Size(11,11), 11, 11);//高斯模糊基于全自动的模糊,稍微清楚一点
	imshow("高斯模糊", gaussmat);

	waitKey(0);
	return 0;
}

效果