原理:
图像模糊又称为图像平滑,是图像处理中最简单和常用的操作之一,使用该操作就是为了给图像降低噪音。图像模糊处理包括:高斯模糊、均值滤波、中值滤波、双边滤波等。模糊滤波其实就是图像的卷积计算,通常这些卷积算子都是线性计算,所以又叫线性滤波。 链接:【OpenCv】图像模糊处理(滤波)
1. 均值滤波: 将黄色卷积核覆盖的9个像素值求平均值代替红色方框位置的像素值。 blur(src,dst,size(x,y),point(-1,-1)); Size:(用于平滑操作的核的大小) Size(1, 15); //y方向模糊运动 point默认参数值为(-1,-1)代表将均值赋给卷积核的中间位置。
2. 高斯滤波: 参考:高斯滤波器详解,三种模糊操作
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat src, src2, dst;
src = imread("D:/PT/stone.jpg");
if (!src.data) {
printf("could not load image...\n");
return -1;
}
double scale = 0.5;
Size dsize = Size(src.cols * scale, src.rows * scale);
resize(src, src2, dsize);
char input[] = "input image";
char output[] = "output image";
namedWindow(input, CV_WINDOW_AUTOSIZE);
namedWindow(output, CV_WINDOW_AUTOSIZE);
namedWindow("output_Gaussian", CV_WINDOW_AUTOSIZE);
imshow(input, src2);
blur(src2, dst, Size(5, 5), Point(-1, -1));
imshow(output, dst);
Mat dst2;
GaussianBlur(src2, dst2, Size(5, 5), 11, 11);
imshow("output_Gaussian", dst2);
waitKey(0);
return 0;
}
3. 中值滤波: 取中位数; 对去椒盐噪声有很好的效果!为什么可以去除椒盐噪声呢?因为椒盐噪声像素值要么很小为0,要么很大为255,而取中间值话,就会用替代这些,从而给图像去噪点。
medianBlur(src, dst, 5);
中值模糊的ksize大小必须是大于1而且必须是奇数。
4. 双边滤波: 链接:OpenCV双边滤波详解及实代码实现
bilateralFilter(dst, dst2, 15, 100, 3);
15 –计算的半径,半径之内的像数都会被纳入计算,如果提供-1 则根据sigma space参数取值
-150 – sigma color 决定多少差值之内的像素会被计算
3 – sigma space 如果d的值大于0则声明无效,否则根据它来计算d值
注:因为之前一直要缩放图片,所以很不方便,索性写到这里把:
double scale = 0.5;
Size dsize = Size(src.cols * scale, src.rows * scale);
resize(src, dst, dsize);
|