原文为段立辉翻译,感谢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. [LintCode笔记了解一下]64.合并排序数组

    Given two sorted integer arrays A and B, merge B into A as one sorted array. 思路: 因为A的后面的部分都是空的留出来给我们 ...

  2. 【小梅哥SOPC学习笔记】切换NIOS II CPU的主内存后软件中需要注意的几点设置

    切换NIOS II CPU的主内存后软件中需要注意的几点设置 有时候,我们可能面对这样一种情况: 1. 我们创建一个SOPC系统,并在QSYS中设置NIOS II的复位地址和异常地址都指向SRAM: ...

  3. 再次学习linux文件特殊权限:SUID、SGID、Sticy Bit

    以前对于文件管理的认识只限于UGO的管理,对于特殊权限的学习还是一知半解.重新学习了一遍,我自己理解的东东记录一下. 首先,列一下SUID.SGID.Sticy Bit所代表的权限数值.就好像rwx分 ...

  4. python 爬虫登录保存会话去获取只有登录能获取的数据

    #!/usr/bin/env python # -*- coding: utf-8 -*- # import ConfigParser import datetime import sys impor ...

  5. IO--RAID

    RAID IO计算 Raid 0 –每个磁盘的I/O计算= (读+写) /磁盘个数 Raid 1 --每个磁盘的I/O计算= [读+(2*写)]/2 Raid 5 --每个磁盘的I/O计算= [读+( ...

  6. Backup--批量备份和还原

    -----------------------------批量备份数据------------------------------------------- Use master GO /*===== ...

  7. GridView中文属性

    GridControl的中文属性: 1  Appearance 外观 Appearance 外观设置 ColumnFilterButton  行过滤器按钮 BackerColor  背景色 Backe ...

  8. iis 部署webapi常见错误及解决方案

    iis 部署webapi常见错误及解决方案 错误一: 原因:asp.net web api部署在Windows服务器上后,按照WebAPI定义的路由访问,老是出现404,但定义一个静态文件从站点访问, ...

  9. numpy 数组运算

    数组的减法:不同维数

  10. java 去最后一位字符 str.substring(0,str.length()-1)

    String str = " 中国, 美国 , 意大利 ";String[] arr = str.split(",");for(int i1 =0;i1< ...