原文为段立辉翻译,感谢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. 云存储上传控件(cloud2)-Xproer.HttpUploader7

    版权所有 2009-2016 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/cloud2/ ...

  2. 推荐一款优秀的代码编辑软件--Source Insight

    “工欲善其事,必先利其器”,好的工具能够提高我们办事的效率,进而提升团队乃至企业的竞争力. 对于软件开发工程师来说,选择一款优秀的代码编辑软件也是很重要的.最近,我看到有很多同事还在用微软的VC ++ ...

  3. 「HNOI 2013」数列

    题目链接 戳我 \(Solution\) 这道题貌似并不难的样子\(QAQ\) 我们发现这个因为有首项的关系所以有点不太好弄.所以我们要将这个首项对答案的影响给去掉. 我们可以构建一个差分数组,我们令 ...

  4. SCPO2015 小凸玩矩阵

    题目链接:戳我 二分答案+最大流. 看到第K大的数的最小值是多少,我们想到二分,把他转化为最大数最小问题--二分一个数x,如果有>=n-k+1个数不比它大,那么它就应当不大于当前数,否则应当大于 ...

  5. [国家集训队] tree Ⅱ

    bzoj2631(权限题...):链接 落咕:链接 考察的是LCT维护链上信息. 但是这个题不一样的是又有加法又有乘法...(有木有想到落咕的模板--线段树2qwq) 因为乘法的运算优先度比加法高,所 ...

  6. linux kvm虚拟机安装

    1.上传ISO文件,这里采用OEL5.8x64iso 2.开始安装OEL5.8 (1)raw格式磁盘 virt- --vcpus= --disk path=/data/test02.img,size= ...

  7. [Objective-C语言教程]循环语句(9)

    当需要多次执行同一代码块时,可以使用循环来解决. 通常,语句按顺序执行:首先执行函数中的第一个语句,然后执行第二个语句,依此类推. 编程语言提供各种控制结构,允许更复杂的执行路径.循环语句可用于多次执 ...

  8. 【spring】SpringBoot之Servlet、Filter、Listener配置

    转载自 http://blog.csdn.net/king_is_everyone/article/details/53116744 1.介绍 通过之前的文章来看,SpringBoot涵盖了很多配置, ...

  9. debian下安装 locale 并设置 zh_CN.UTF-8 [转]

    root@Linkstation :~# apt-get install locales root@Linkstation:~# dpkg-reconfigure locales root@Links ...

  10. pandas如何统计所有列的空值,并转化为list?

    统计所有列的空值:data.isnull().sum() 转化成list: df.isnull().sum().index.tolist() df.isnull().sum().values.toli ...