原文为段立辉翻译,感谢Linux公社www.linuxidc.com
此文档为自学转述,如有侵权请联系本人。

目标:

• 学习使用不同的低通滤波器对图像进行模糊
• 使用自定义的滤波器对图像进行卷积(2D 卷积)

 
1、2D卷积
同一维信号一样,我们也可以对2D图像实施低通滤波(LPF),高通滤波(HPF)等,LPF帮我们去除噪音,模糊图像。HPF帮我们找到图像的边缘。
Opencv 提供的函数cv2.filter2D() 可以对一副图像进行卷积操作。如下图是一个5✖️5的平均滤波器核。

操作如下,将核放在图像的一个像素A上,求与核对应的图像上25(5✖️5)个像素的和,再取平均数,用这个平均数代替像素A上的值。重复以上的操作知道将图像的每一个像素都更新一遍。

import  numpy as np
import cv2
import matplotlib as mlp
mlp.use('TkAgg')
from matplotlib import pyplot as plt img = cv2.imread('./opencv_learn/opencv.png')
# cv2.imshow('img',img)
# cv2.waitKey(0) kernel = np.ones((5,5), np.float32)/25 dst = cv2.filter2D(img, -1, kernel) # plt.subplot(121),plt.imshow(img),plt.title('original')
# plt.xticks([]),plt.yticks([])
# plt.subplot(122),plt.imshow(dst),plt.title('averaging')
# plt.xticks([]),plt.yticks([])
# plt.show() while(1):
cv2.imshow('img',img)
cv2.imshow('dst',dst)
k = cv2.waitKey(1)
if k == ord('q'):
break cv2.destroyAllWindows()

2、平均
这是由一个归一化的卷积完成的,他只是用卷积框覆盖区域所有像素的平均值来代替中心元素。
使用函数:cv2.blur()和 cv2.boxFilter()
注意:如果你不想使用归一化卷积框,你应该使用 cv2.boxFilter(),这时要 传入参数 normalize=False 
blur = cv2.blur(img,(3,3))

3、高斯模糊

现在把卷积核换成高斯核(简单来说,方框不变,原来的每个方框的值是相等的,现在里面的值是符合高斯分布的,方框中心的值最大,其余值根据距离中心元素的距离递减,原来的求平均数变成求加权平均数,权就是方框里面的值)

实现函数是cv2.GaussianBlur()

需要指定高斯核的宽和高(必须是奇数),以及高斯函数沿X,Y方向的标准差,两个方向的标准差取值相同,如果都为0,则函数会根据核函数的大小自己计算。高斯滤波可以有效的从图像中去除高斯噪音。

blur = cv2.GaussianBlur(img, (5,5)0)

4、中值模糊

用卷积框对应像素的中值来替代中心像素的值。去除椒盐噪声效果比较好。

median = cv2.medianBlur(img,5)

 

5、双边滤波

cv2.bilateralFilter() 能在保持边界清晰的情况下有效的去除噪音。缺点速度较慢

高斯滤波器只考虑像素之间的空间关系,而不会考虑像素值之间的关系(像素的相似度),所以这种方式会把边界也模糊掉。

双边滤波在同时使用空间高斯权重和灰度值相似性高斯权重。空间高斯权重确保只有领近区域的像素对中心点有影响,灰度值相似性高斯函数确保只有与中心像素灰度值相似才会被用来做模糊运算。

#cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)
#d – Diameter of each pixel neighborhood that is used during filtering. # If it is non-positive, it is computed from sigmaSpace
# 9 邻域直径,两个 75 分别是空间高斯函数标准差,灰度值相似性高斯函数标准差
blur = cv2.bilateralFilter(img,9,75,75)

  

 

【OpenCV-Python】-图像平滑的更多相关文章

  1. OpenCV Python教程(3、直方图的计算与显示)

    转载请详细注明原作者及出处,谢谢! 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途什么的就直接略过去了. ...

  2. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  3. opencv+python视频实时质心显示

    利用opencv+python实现以下功能: 1)获取实时视频,分解帧频: 2)将视频做二值化处理: 3) 将视频做滤波处理(去除噪点,获取准确轮廓个数): 4)识别图像轮廓: 5)计算质心: 6)描 ...

  4. Erlang/Elixir: 使用 OpenCV, Python 搭建图片缩略图服务器

    这篇文章是在OSX上测试和运行的的, Ubuntu下的安装和配置请移步到这里 应用程序进程树, 默认 Poolboy 中初始化10个用于处理图片的 Python 工作进程(Worker) 首先安装Op ...

  5. opencv python实用操作

    画多边形 fillConvexPloy与fillConvexPloy的区别 fillConvexPloy 用来画单个凸多边形: 如果点集的连线不是凹多边形,则会找一个最小的凸多边形把该凹多边形包住画出 ...

  6. Win7 64bit+Anaconda(3-5.0.1,Python3.6)+Pycharm(community-2017.3.3)+OpenCV(python‑3.4.0‑cp36‑cp36m)(转载)

    Anaconda(3-5.0.1,Python3.6)下载链接:https://pan.baidu.com/s/1bqFwLMB 密码:37ih Pycharm(community-2017.3.3) ...

  7. 解决Windows Server 2012 R2 Datacenter云服务器无法运行opencv python程序的问题

    写了个基于opencv的python程序,pyinstaller 32位机打包后在win7/win10 32/64正常运行,在Windows Server 2012 R2 Datacenter云服务器 ...

  8. OpenCV Python 4.0安装

    1.安装OpenCV-Python 如果你是第一次使用OpenCV Python开发包,想要安装OpenCV Python4.0只要执行如下命令行即可: pip install opencv-pyth ...

  9. Ubuntu系统---安装Caffe (+OpenCV+Python+CPU-only)

    安装配置Ubuntu14.04+Caffe (+OpenCV+Python+CPU-only) 记录 [作者:Wu Ping.时间:20180428.] 本人已经安装很多次的Caffe了:从开始的初探 ...

  10. 【图像处理】OpenCV+Python图像处理入门教程(六)图像平滑处理

    相信很多小伙伴都听过"滤波器"这个词,在通信领域,滤波器能够去除噪声信号等频率成分,然而在我们OpenCV中,"滤波"并不是对频率进行筛选去除,而是实现了图像的 ...

随机推荐

  1. ASP.NET JSON数据转实体类方式

    实体类 public class FlieList { public string file_unid { get; set; } public string file_name { get; set ...

  2. 编写高质量代码改善C#程序的157个建议——建议91:可见字段应该重构为属性

    建议91:可见字段应该重构为属性 字段和属性的本质区别就是属性是方法. 查看下面这个Person类型: class Person { public string Name { get; set; } ...

  3. 自己(转)JAVA中toString方法的作用

    JAVA中toString方法的作用 因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如System.out.print ...

  4. centos 学习总结

    我用的是6.4 添加中文输入法 .su root .yum install "@Chinese Support" .exit .回到桌面,system->preference ...

  5. 基于 Web 的数据挖掘--自动抽取用 HTML、XML 和 Java 编写的信息

    简介: 不可否认,万维网是到目前为止世界上最丰富和最密集的信息来源.但是,它的结构使它很难用系统的方法来利用信息.本文描述的方法和工具将使那些熟悉 Web 最常用技术的开发人员能快速而便捷地获取他们所 ...

  6. Java中String、StringBuffer和StringBuilder之间的区别

    String在Java中是字符串常量 例如 String str = "abc"; str = str + 1; System.out.println(str); 结果将是abc1 ...

  7. 从hive将数据导出到mysql(转)

    从hive将数据导出到mysql http://abloz.com 2012.7.20 author:周海汉 在上一篇文章<用sqoop进行mysql和hdfs系统间的数据互导>中,提到s ...

  8. 爬虫开发8.scrapy框架之持久化操作

    今日概要 基于终端指令的持久化存储 基于管道的持久化存储 今日详情 1.基于终端指令的持久化存储 保证爬虫文件的parse方法中有可迭代类型对象(通常为列表or字典)的返回,该返回值可以通过终端指令的 ...

  9. OCP 052新加的考试题收集整理-第20道

    20. Which is true about the SYSTEM and SYSAUX tablespaces? A) The SYSAUX tablespace can be made read ...

  10. js项目

    https://bbs.csdn.net/topics/320029234 文本实现悬挂缩进 牛逼牛逼 这是真的牛逼 p:first-letter {         margin-left: -2e ...