平滑(模糊)操作: 为了较少图片的噪音和伪影,平滑图像与图像模糊处理是相同的含义,平滑处理即是通过操作后,使得图像的像素值与邻域内其他像素值的的变化程度减小。在一张图像上,边缘的像素值是变化程度最剧烈的地方,而其他相对平缓。因此,平滑图像最直观的表现是图像的上物体的边缘轮廓变得模糊。
有五种不同的平滑操作:
1.简单模糊和方框性滤波器 blur
2.中值滤波器 medianblur
3.高斯滤波器 (首选) gaussianblur
4.双边滤波器 bilateralfilter
5.scharr滤波器
以高斯滤波器来学习。
高斯滤波
是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
实质上是一种信号的滤波器,其用途为信号的平滑处理,数字图像用于后期应用,其噪声是最大的问题,因为误差会累计传递等原因,大多图像处理教材会在很早的时候介绍Gauss滤波器,用于得到信噪比SNR较高的图像(反应真实信号)。高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。
src:源图像
dst:目标图像
borderType:边缘像素的平滑方式
ksize:滤波器的宽度核高度
sigmax:高斯核在x方向的sigma值(最大值的半宽)
sigmay:在y方向的sigma值
gaussianblur(src,dst,ksize,sigmax,sigmay,bordertype)
生成高斯滤波器
cv::getGaussianKernal()
代码实现
#include<iostream>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img, imgGray,result,dst;
img = imread("C:\\Users\\shawn\\Pictures\\Saved Pictures\\1.JPG");
if (!img.data) {
cout << "Please input image path" << endl;
return 0;
}
imshow("原图", img);
/*cvtColor(img, imgGray, CV_BGR2GRAY);
imshow("灰度图", imgGray);
threshold(imgGray, result, 100, 255, CV_THRESH_BINARY);
imshow("二值化图", result);//二值化*/
GaussianBlur(img, dst, Size(7, 7), 0, 0);//平滑操作
//显示效果图
imshow("高斯滤波【效果图】", dst);
waitKey();
destroyAllWindows();
return 0;
}