OpenCV第三讲: 方框滤波、均值滤波、高斯滤波

在上一讲中谈到了图像滤波的原理和一些常见的方法,在本讲中将从代码实现的角度讨论三种常见的线性滤波器。

1. 方框滤波

  • 方框滤波(box Filter) —> boxblur

      boxblur函数的作用是使用方框滤波器来模糊一张图片.
    

2. 均值滤波

  • 均值滤波,归一化后的方框滤波 —> blur

      最简单的一种滤波操作,输出图像的每一个像素是"核"窗口内输入图像对应区域像素的平均值,即所有像素加权系数相等。
      
      "缺陷", 不能很好地保护细节,去噪的同时也破坏了图像的部分细节,使得图像变得模糊。
    

3. 高斯滤波

高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器, 高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。

4. 源代码剖析

FilterEngine(内部) ---- 图像滤波功能的核心引擎。它包含了所有必要的中间缓存器。

在实际中使用这些滤波器函数非常简单,如下所示:

	#include <opencv2/opencv.hpp>

	using namespace std;
	using namespace cv;

	/*****************************
	 * void boxFilter( InputArray src, OutputArray dst, int ddepth,
	 *                           Size ksize, Point anchor = Point(-1,-1),
	 *                           bool normalize = true,
	 *                           int borderType = BORDER_DEFAULT );
	 * 
	 * ddepth : 输出图像的深度,-1代表原图深度;
	 * ksize : 内核的大小 
	 * anchor : 表示锚点, 就是被平滑的那个点
	 * normalize : 是否归一化
	 * 
	 ***********************************************/
	int main(int argc, char** argv)
	{
		if(! argc ==2)
		{
			std::cerr<<"please run ./Binary ../cfg/timg2.jpeg \n";
		}
	
		string filename = argv[1];
		Mat srcImage = imread(filename,1);
		Mat blurOut, boxOut, GaussianOut;
		imshow("srcImage",srcImage );
	
		blur(srcImage, blurOut, Size(5, 5));
		imshow("blur", blurOut);
	
		boxFilter(srcImage, boxOut, -1, Size(5, 5));
		imshow("boxFilter", boxOut);

		// sigmaX --> 代表x方向上的标准偏差;
	
		GaussianBlur(srcImage, GaussianOut, Size(5, 5), 0, 0 );
		imshow("GaussianBlur", GaussianOut);
	
		waitKey(0);
		return 0;
	}

5. 运行结果如下图

在这里插入图片描述

在上图中从左到右依次为:均值滤波、方框滤波、高斯滤波以及原图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱发呆de白菜头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值