图像平滑处理:
是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和高频干扰成分的图像
处理方法,
目的是使图像亮度平缓渐变,减小突变梯度,改善图像质量。
平滑处理时需要滤波器
归一化滤波器
最简单的滤波器,输出像素值是核窗口内像素值的均值。
blur(Mat src, Mat det, Size(xradius,yradius),Point(-1,-1));
src:输入图像
dst:输出图像
Size(w,h):定义内核大小,宽度,高度
Point(-1,-1):指定锚点位置(被平滑点),如果为负值,取核的中心为锚点。
高斯滤波器
GaussianBlur(Mat src,Mat dst,Size(i,i),sigmax,sigmay);
其中Size(x,y),x,y必须是正数而且是奇数。
Size(w,h):定义内核大小(需要考虑邻域的范围),w,h必须是正奇数,否则将使用sigmax
和sigmay参数来计算内核大小。
sigmax:x方向标准差,如果是0则sigmax用内核大小计算得到。
digmay:y方向标准差,如果是0则sigmay用内核大小计算得到。
中值滤波器
统计排序滤波器
中值模糊对椒盐噪声(极大值,极小值)有很好的抑制作用。
medianBlur(src,dst,ksize)
ksize:内核大小(只需一个值,因为使用正方形)必须为奇数
双边滤波器
均值模糊无法克服边缘像素信息丢失缺陷,原因是均值滤波器是基于平均权重
高斯模糊部分克服了该缺陷,但是无法完全避免因为没有考虑像素值的不同。
高斯双边模糊 是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓不变。
bilaterFilter(src,dst,d,sigmaC,sigmaS)
d:像素的邻域半径,半径之内的像素值会被纳入计算
sigmaColor:颜色空间的标准方差,决定多少差值之内的像素会被计算。
sigmaSpace:坐标空间的标准方差(像素单位),如果d的值大于0,则声明无效,
否则用它来计算d的值。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace std; using namespace cv; int main() { Mat src, dst; src = imread("D:\\OpenCVT\\5.jpg"); if (!src.data) { printf("could not load image!"); exit(0); } char input_title[] = "input image"; char output_title[] = "blur image"; char gaussian_title[] = "Gaussian Blur"; char median_title[] = "Median Blur"; char bilater_filter[] = "gaussian filter"; namedWindow(input_title,CV_WINDOW_AUTOSIZE); namedWindow(output_title, CV_WINDOW_AUTOSIZE); namedWindow(gaussian_title, CV_WINDOW_AUTOSIZE); namedWindow(median_title, CV_WINDOW_AUTOSIZE); namedWindow(bilater_filter, CV_WINDOW_AUTOSIZE); imshow(input_title, src); blur(src, dst, Size(9, 3), Point(-1, -1)); imshow(output_title, dst); Mat gdst; GaussianBlur(src, gdst, Size(5, 5), 11, 11); imshow(gaussian_title, gdst); Mat mdst; medianBlur(src, mdst, 3); imshow(median_title, mdst); Mat fdst; bilateralFilter(src, fdst, 3, 150, 3); imshow(bilater_filter, fdst); waitKey(0); return 0; }