当前位置: 首页 > news >正文

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. 运行结果如下图

在这里插入图片描述

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

相关文章:

  • 机器学习第一课:基础概念扫盲
  • 机器学习第二课:神经网络结构和专业术语
  • OpenCV第四讲: 非线性滤波
  • OpenCV第五讲: 形态学滤波
  • OpenCV第六讲: 漫水填充、图像金字塔
  • OpenCV第七讲:阈值的作用
  • OpenCV第八讲:图像变换之边缘检测(Canny+Sobel算子)
  • V-SLAM 回环检测与后端优化重读
  • OpenCV第九讲:图像变换之边缘检测(Laplacian +Scharr 算子)
  • OpenCV第十讲:图像几何形状识别之霍夫变换
  • OpenCV 第十一讲: 重映射、仿射变换、直方图均衡化
  • OpenCV第十二讲:角点检测与亚像素精度
  • OpenCV第十三讲:SURF特征点的检测与匹配详解
  • OpenCV第十四讲: Fast特征点与ORB特征点原理详解
  • DAVIS第一课: 事件相机的工作原理和相关核心功能简介
  • ES6指北【2】—— 箭头函数
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Brief introduction of how to 'Call, Apply and Bind'
  • SQLServer插入数据
  • vue-router 实现分析
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 动态魔术使用DBMS_SQL
  • 搞机器学习要哪些技能
  • 面试遇到的一些题
  • 排序算法学习笔记
  • 强力优化Rancher k8s中国区的使用体验
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 用简单代码看卷积组块发展
  • 怎样选择前端框架
  • linux 淘宝开源监控工具tsar
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​如何防止网络攻击?
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #NOIP 2014#Day.2 T3 解方程
  • #stm32驱动外设模块总结w5500模块
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (C语言)共用体union的用法举例
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (接口封装)
  • (六)激光线扫描-三维重建
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (转)树状数组
  • (转载)从 Java 代码到 Java 堆
  • (转载)深入super,看Python如何解决钻石继承难题
  • .NET CORE Aws S3 使用
  • .NET Micro Framework 4.2 beta 源码探析