C++均值模糊与高斯模糊
1、均值模糊
1.1、 模糊
原理:
平滑、模糊是图像常见的简单处理之一,主要目的是为了降低图像中的噪声。
模糊操作的原理是数学中的卷积运算。
f
(
i
,
j
)
f(i,j)
f(i,j) 表示图像中处理的像素,
(
k
,
l
)
(k,l)
(k,l)表示滤波器的大小,一般情况下,
k
=
l
k=l
k=l。
运算过程就是将卷积核中的值对应图像中的值相乘后相加。将所得值就是像素
g
(
i
,
j
)
g(i,j)
g(i,j)。
1.2、均值模糊
2、高斯滤波
σ
x
\sigma_x
σx、
σ
y
\sigma_y
σy用来调节大小,A表示权值参数,
(
x
,
y
)
(x,y)
(x,y)为像素值。
3、代码实现
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** args)
{
Mat img = imread("G:/testpic/label.png");
if (!img.data)
{
printf("cannot load the image");
return -1;
}
char input_img[] = "img";
char output_blur[] = "blur";
char output_gaussian_blur[] = "gaussian_blur";
namedWindow(input_img, WINDOW_AUTOSIZE);
imshow(input_img, img);
Mat dst1, dst2;
//均值模糊
blur(img, dst1, Size(3,3), Point(-1,-1)); //Point(-1,-1)为卷积核中心的位置
namedWindow(output_blur, WINDOW_AUTOSIZE);
imshow(output_blur, dst1);
//高斯模糊
//
GaussianBLur(img, dst2, Size(3,3), 10, 10); //10为 $\sigma$的大小
namedWindow(output_gaussian_blur, WINDOW_AUTOSIZE);
imshow(output_gaussian_blur, dst2);
waitKey(0);
return 0;
}
均值模糊:
高斯模糊: