【OpenCV3经典编程100例】(06)空间滤波:中值滤波medianBlur()、椒盐噪声salt()

1.自定义salt()函数给彩色图像或者灰度图增加白色噪点

2.中值滤波medianBlur()在去除椒盐噪点方面十分有效

API函数

	//中值滤波
	void medianBlur(InputArray src,//输入图像
		OutputArray dst,//输出图像
		int ksize);//孔径的线性尺寸,必须是奇数

一、c++示例代码

//包含头文件
#include 
//命名空间
using namespace cv;
using namespace std;
//全局函数声明部分
void salt(Mat &image, int n);
//主函数
int main()
{
	//【1】载入图像
	Mat image = imread("F:\\opencvtest\\testImage\\beauty.png");
	//【2】增加椒盐噪声
	salt(image, 3000);
	//【3】显示图像
	imshow("示例06-1", image);
	//【4】中值滤波,5*5的核函数
	Mat result;
	medianBlur(image, result, 3);
	//【5】显示图像
	imshow("示例06-2", result);
	//【6】保持窗口显示
	waitKey(0);
	return 0;
}

//盐噪声生成函数
void salt(Mat &image, int n)
{
	for(int k = 0; k != n; k++)
	{
		//rand()随机生成函数
		int i = rand()%image.rows;//随机行数
		int j = rand() % image.cols;//随机列数
		if(image.channels() == 1)
		{
			//灰度图像
			image.at(i, j) = 255;
		}
		else if(image.channels() == 3)
		{
			//彩色图像
			image.at(i, j)[0] = 255;
			image.at(i, j)[1] = 255;
			image.at(i, j)[2] = 255;
		}
	}
}

二、运行截图

增加白色噪点后

【OpenCV3经典编程100例】(06)空间滤波:中值滤波medianBlur()、椒盐噪声salt()_第1张图片

中值滤波后

【OpenCV3经典编程100例】(06)空间滤波:中值滤波medianBlur()、椒盐噪声salt()_第2张图片

三、数字图像处理知识

非线性滤波器

1. 定义:基于滤波器所在图像区域中像素的排序,由排序结果决定的值代替中心像素的值。

2. 分类

中值滤波器: 用像素领域内的中间值代替该像素,去除噪声。

✓ 最大值滤波器:用像素领域内的最大值代替该像素,寻找最亮点。

✓ 最小值滤波器:用像素领域内的最小值代替该像素,寻找最暗点。

3. 中值滤波算法的特点

✓在去除噪音的同时,可以比较好地保留边的锐度和图像的细节(优于均值滤波器)

✓能够有效去除脉冲噪声(椒盐噪声):以黑白点叠加在图像上



你可能感兴趣的:(【OpenCV3经典编程100例】(06)空间滤波:中值滤波medianBlur()、椒盐噪声salt())