这篇博客来学习一下图像均值与高斯模糊。
这是一个平滑图片的函数,它将一个区域内所有点的灰度值的平均值作为这个点的灰度值。
像该函数对领域点的灰度值进行权重相加最后设置灰度值,这样的操作又叫卷积,这样的滤波器叫线性滤波器。
高斯滤波器能够有效的抑制噪声,平滑图像。高斯滤波器相比于均值滤波器对图像个模糊程度较小。
高斯模糊和均值模糊其原理上的唯一区别只是在于卷积核的值不同罢了,高斯卷积核矩阵值服从二维高斯函数
也就是说一个图像与服从二维高斯分布的函数做卷积,由于高斯函数是连续的,所有yaoj要将二维高斯函数进行采样和离散化,最后得到服从高斯函数规律的卷积核矩阵。
函数原型
void blur(InputArray src,
OutputArray dst,
Size ksize,
Point anchor=Point(-1,-1),
int borderType=BORDER_DEFAULT )
参数解释
第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。该函数对通道是独立处理的,且可以处理任意通道数的图片,但需要注意,待处理的图片深度应该为CV_8U, CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。比如可以用Mat::Clone,以源图片为模板,来初始化得到如假包换的目标图。
第三个参数,Size类型(对Size类型稍后有讲解)的ksize,内核的大小。一般这样写Size( w,h )来表示内核的大小( 其中,w 为像素宽度, h为像素高度)。Size(3,3)就表示3x3的核大小,Size(5,5)就表示5x5的核大小
第四个参数,Point类型的anchor,表示锚点(即被平滑的那个点),注意他有默认值Point(-1,-1)。如果这个点坐标是负值的话,就表示取核的中心为锚点,所以默认值Point(-1,-1)表示这个锚点在核的中心。
第五个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT,我们一般不去管它。
函数原型及参数介绍
void GaussianBlur(
InputArray src, //输入图片
OutputArray dst, //输出图片
Size ksize, // Ksize为高斯滤波器窗口大小
double sigmaX, // X方向滤波系数
double sigmaY=0, // Y方向滤波系数
int borderType=BORDER_DEFAULT // 默认边缘插值方法
)
#include
#include
using namespace cv;
using namespace std;
int main(int artc, char** argv) {
Mat src = imread("C:\\Users\\Dell\\Desktop\\picture\\opencv_tutorial\\opencv_tutorial\\data\\images\\snow.png");
if (src.empty()) {
printf("could not load image...\n");
return -1;
}
namedWindow("input", WINDOW_AUTOSIZE);
imshow("input", src);
Mat dst1, dst2, dst3;
blur(src, dst1, Size(5, 5), Point(-1, -1), 4);
GaussianBlur(src, dst2, Size(15, 15), 15, 0, 4);
//GaussianBlur(src, dst3, Size(5, 5), 25, 0, 4);
imshow("blur", dst1);
imshow("gaussian blur", dst2);
//imshow("gaussian blur2", dst3);
waitKey(0);
return 0;
}
这篇博客我们主要学习了基于C++ 以及opencv的图像均值与高斯模糊。
加油吧 阿超没有蛀牙!