图像平滑处理的几种常用方法:

  • 均值滤波
  • 归一化滤波
  • 高斯模糊
  • 中值滤波

平滑处理(模糊)的主要目的是去燥声:

不同的处理方式适合不同的噪声图像,其中高斯模糊最常用。

其实最重要的是对图像卷积的核的理解,核太大图像会失真,具体关于核的讲解点击传送门

图像噪声:引起较强视觉效果的孤立像素点或像素块。一般,噪声信号与要研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观测信息。通俗的说就是噪声让图像不清楚。

废话不多说,直接上代码:

#均值滤波         //像素点等于周围N*N像素的平均值
img = cv.imread("E:/pictures/lenanoise.jpg")
blur = cv.blur(img,(7,7)) #res = cv.blur(src,核大小)
cv.imshow("orginal",img)
cv.imshow("blur",blur)
cv.waitKey()
cv.destroyAllWindows()

  (这是原图)

def blur(src, ksize, dst=None, anchor=None, borderType=None)
kSize:内核参数,其实就是图片进行卷积的时候相乘的那个矩阵,具体的卷积是如何算的,网上有很多,我这里就不介绍了,所得到的图像是模糊的,而且图像其实是按照原来的比例缺少了(原图像-内核参数+1)^2 个单元格
anchor:Point类型,即锚点,有默认值Point(-1,-1),当坐标为负值,就表示取核的中心。
borderType:Int类型,用于推断图像外部像素的某种边界模式,有默认值BORDER_DEFAULT.

方框滤波(归一化滤波):
#方框滤波                归一化处理
img = cv.imread("E:/pictures/lenanoise.jpg")
boxFiter = cv.boxFilter(img,-1,(5,5))
boxFiter2 = cv.boxFilter(img,-1,(5,5),normalize=False) #res = cv.boxFilter(src,图像深度,核大小,normalize属性)
cv.imshow("orginal",img) #图像深度一般设为-1表示和原图的深度一样
cv.imshow("boxFilter",boxFiter) #normalize->是否进行归一化处理
cv.imshow("boxFilter2",boxFiter2) #normalize属性有两个值TRUE和False,默认为TRUE
cv.waitKey() #(归一化)normalize为TRUE时和均值滤波一样,等于周围N*N个像素的平均值
cv.destroyAllWindows() #normalize为FALSE时,表示周围N*N个像素和,大于255的置为255

  


高斯模糊:

#高斯滤波         //周围N*N个像素的加权平均值
img = cv.imread("E:/pictures/lenanoise.jpg") #离中心点越近权重越大,越远权重越小
gassblur = cv.GaussianBlur(img,(9,9),0) #dst = cv.GaussianBlur(src,ksize,sigmax)
cv.imshow("orginal",img) #ksize->核大小(必须为奇数)3=3*3,5=5*5
cv.imshow("GaussianBlur",gassblur) #sigmax ->x方向方差(计算权重) ,一般设为0,由ksize推算,当然是由计算机完成的
cv.waitKey()
cv.destroyAllWindows() 在这种方法中,不使用由相同滤波器系数组成的盒式滤波器,而是使用高斯内核。 它使用函数cv2.GaussianBlur()完成。 我们应该指定内核的宽度和高度
,它应该是正数和奇数。 我们还应该分别指定X和Y方向的标准偏差sigmaX和sigmaY。 如果只指定sigmaX,则sigmaY等于sigmaX。 如果两者均为零,则从
内核大小进行计算。 高斯滤波非常有效地消除图像中的高斯噪声。



中值滤波:
#中值滤波              将n*n个像素排序后取中值作为新的像素值(核必须为奇数)
img = cv.imread("E:/pictures/lenanoise.jpg")
medianblur = cv.medianBlur(img,3) #dst = cv.medianBlur(src,ksize)
cv.imshow("orginal",img) #ksize->核大小,必须为奇数,如3,5,7...代表3*3,5*5....
cv.imshow("GaussianBlur",medianblur)
cv.waitKey()
cv.destroyAllWindows()

opencv学习笔记(四)--图像平滑处理的更多相关文章

  1. 【opencv学习笔记四】opencv3.4.0图形用户接口highgui函数解析

    在笔记二中我们已经知道了,在highgui文件夹下的正是opencv图形用户接口功能结构,我们这篇博客所说的便是D:\Program Files\opencv340\opencv\build\incl ...

  2. OpenCV学习笔记(8)——图像平滑

    使用不同的低筒滤波器对图像进行模糊 使用自定义的率弄起对图像进行卷积(2D卷积) 2D卷积 与信号一样,我们也可以对2D图像实施低通滤波,高通滤波等.LPF帮助我们去除噪声,模糊图像.而HPF帮助我们 ...

  3. OpenCV学习笔记四:ImgProc模块

    一,简介 这个模块包含一系列的常用图像处理算法. 二,分析 此模块包含的文件如下图: 其导出算法包括如下: /*********************** Background statistics ...

  4. OpenCV学习笔记3

    OpenCV学习笔记3 图像平滑(低通滤波) 使用低通滤波器可以达到图像模糊的目的.这对与去除噪音很有帮助.其实就是去除图像中的高频成分(比如:噪音,边界).所以边界也会被模糊一点.(当然,也有一些模 ...

  5. opencv学习笔记(四)投影

    opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...

  6. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  7. OpenCV 学习笔记 07 目标检测与识别

    目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...

  8. OpenCV 学习笔记03 findContours函数

    opencv-python   4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...

  9. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

随机推荐

  1. Tornado 高并发源码分析之一---启动一个web服务

    前言: 启动一个tornado 服务器基本代码 class HomeHandler(tornado.web.RequestHandler): #创建 RequesHandler 对象,处理接收到的 h ...

  2. JAVA基础知识总结16(IO流)

    IO流:用于处理设备上数据. 流:可以理解数据的流动,就是一个数据流.IO流最终要以对象来体现,对象都存在IO包中. 流也进行分类: 1:输入流(读)和输出流(写). 2:因为处理的数据不同,分为字节 ...

  3. 安装saltstack-web管理界面

    1.安装salt-master.salt-minion和salt-api $ sudo yum install epel-release -y $ sudo yum install salt-mast ...

  4. 【光速使用开源框架系列】数据库框架OrmLite

    [关于本系列] 最近看了不少开源框架,网上的资料也非常多,但是我认为了解一个框架最好的方法就是实际使用.本系列博文就是带领大家快速的上手一些常用的开源框架,体会到其作用. 由于作者水平有限,本系列只会 ...

  5. libevent源码深度剖析十

    libevent源码深度剖析十 ——支持I/O多路复用技术 张亮 Libevent的核心是事件驱动.同步非阻塞,为了达到这一目标,必须采用系统提供的I/O多路复用技术,而这些在Windows.Linu ...

  6. CURL以 POST 请求链接的方式 初始化一个cURL会话来获取一个网页

    /** *POST URL */ function posturl($URL,$data) { $ch = curl_init(); // 创建一个新cURL资源 curl_setopt($ch,CU ...

  7. Setting up an OpenGL development environment in ubuntu

    1.opening terminal window and entering the apt-get command for the packages: sudo apt-get install me ...

  8. zookeeper 面试题 有用

    .zookeeper是什么框架? zookeeper是一个开源的分布式协调服务框架. 2.有哪些应用场景? 应用场景:分布式通知/协调.负载均衡.配置中心.分布式锁.分布式队列等. 3.使用什么协议? ...

  9. cout/cin

    转载来源:http://baike.baidu.com/link?url=NiNaSw0pF7RqFO8u0jx8KWk9yOfFFYy24xCJlQ6_qMcw5_WBzRKOqsO6tfvvJbZ ...

  10. Mybatis——Spring整合

    一.引入依赖 Spring的相关jar包 mybatis-3.4.1.jar mybatis-spring-1.3.0.jar mysql-connector-java-5.1.37-bin.jar ...