学习目标:

  • 使用自定义的滤波器对图像进行卷积(2D 卷积)

  • 学习使用不同的低通滤波器对图像进行模糊

一、2D卷积

卷积不是很了解的可以看我上一篇博客,与语音信号一样,我们也可以对 2D 图像实施低通滤波(LPF),高通滤波(HPF)等。低通滤波器就是允许低频信号通过,在图像中边缘和噪点都相当于高频部分,所以低通滤波器用于去除噪点、平滑和模糊图像。高通滤波器则反之,用来增强图像边缘,进行锐化处理。

2D卷积其本质上也是一个加权平均的过程,openCV提供cv2.filter2D(src ,deepth,kernel)函数进行2D卷积,其中kernel是我们需要提供的卷积核,卷积核一般为一个奇数级的矩阵,其中所有元素的和为1,deepth一般为-1.

import cv2
import numpy as np
img = cv2.imread('/home/wl/le.jpeg',1)
kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel)
while(1):
cv2.imshow('opencv',dst)
k = cv2.waitKey(1)& 0XFF
if k == ord('q'):
break
cv2.imwrite('/home/wl/1.jpg',dst)
cv2.destroyAllWindows()

原图:

卷积图:

二、图像模糊

OpenCV 提供了四种模糊技术,但其本质上还是在卷积。

(1)平均

Cv2.blur(src ,size)可以用于实现最简单的平均卷积操作,原理和上面2D卷积一样,只需要提供一个size数组,该数组包含卷积核的长度和宽度即可。

import cv2
img = cv2.imread('/home/wl/le.jpeg',1)
dst = cv2.blur(img,(5,5))
while(1):
cv2.imshow('opencv',dst)
k = cv2.waitKey(1)& 0XFF
if k == ord('q'):
break
cv2.imwrite('/home/wl/1.jpg',dst)
cv2.destroyAllWindows()



(2)高斯模糊

现在把卷积核换成高斯核(简单来说,方框不变,将原来每个方框的值是相等的,现在里面的值是符合高斯分布的,方框中心的值最大,其余方框根据距离中心元素的距离递减,构成一个高斯小山包。原来的求平均数现在变成求加权平均数,全就是方框里的值)。实现的函数是 cv2.GaussianBlur(src ,size ,标准差)。我们需要指定高斯核的宽和高(必须是奇数)。以及高斯函数沿 X,Y 方向的标准差。如果我们只指定了 X 方向的的标准差,Y 方向也会取相同值。如果两个标准差都是 0,那么函数会根据核函数的大小自己计算。高斯滤波可以有效的从图像中去除高斯噪音。如果你愿意的话,你也可以使用函数 cv2.getGaussianKernel() 自己构建一个高斯核。

import cv2
img = cv2.imread('/home/wl/le.jpeg',1)
dst = cv2.GaussianBlur(img,(5,5),2)
while(1):
cv2.imshow('opencv',dst)
k = cv2.waitKey(1)& 0XFF
if k == ord('q'):
break
cv2.imwrite('/home/wl/1.jpg',dst)
cv2.destroyAllWindows()


(3)中值模糊

中值模糊非常简单,其使用卷积核对应的像素阵列的中值去代替卷积核最中心位置像素的像素值,注意,此处的中值是统计意义上的中值,要先对像素阵列中的值进行排序再取的中值。这个滤波器经常用来去除椒盐噪声。使用cv2.medianBlur(img,size)即可实现中值模糊。

import cv2
img = cv2.imread('/home/wl/le.jpeg',1)
dst = cv2.medianBlur(img,7)
while(1):
cv2.imshow('opencv',dst)
k = cv2.waitKey(1)& 0XFF
if k == ord('q'):
break
cv2.imwrite('/home/wl/1.jpg',dst)
cv2.destroyAllWindows()

(4)双边滤波

使用高斯模糊等方式,只考虑了像素的空间关系,但不会考虑像素之间的大小关系,其结果有可能会导致图像边缘失真,而双边滤波则会考虑像素的大小关系,双边滤波同时使用了空间高斯权重以及灰度值的相似性权重(边界处的灰度值变化比较大),空间高斯函数确保只有邻近区域的像素对中心点有影响,灰度值相似性高斯函数确保只有与中心像素灰度值相近的才会被用来做模糊运算,所以使用双边滤波则可以较好的保留图像边缘。使用cv2.bilateralFilter(src ,size,空间标准差,灰度值标准差)可以实现双边滤波。

Opencv笔记(十一)——图像模糊(平滑)的更多相关文章

  1. 《C++游戏开发》笔记十一 平滑动画:不再颤抖的小雪花

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9430645 作者:七十一雾央 新浪微博:http:/ ...

  2. opencv笔记5:频域和空域的一点理解

    time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ...

  3. opencv笔记4:模板运算和常见滤波操作

    time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...

  4. OpenCV笔记大集锦(转载)

    整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...

  5. opencv笔记6:角点检测

    time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...

  6. opencv笔记3:trackbar简单使用

    time:2015年 10月 03日 星期六 13:54:17 CST # opencv笔记3:trackbar简单使用 当需要测试某变量的一系列取值取值会产生什么结果时,适合用trackbar.看起 ...

  7. opencv笔记2:图像ROI

    time:2015年 10月 03日 星期六 12:03:45 CST # opencv笔记2:图像ROI ROI ROI意思是Region Of Interests,感兴趣区域,是一个图中的一个子区 ...

  8. opencv笔记1:opencv的基本模块,以及环境搭建

    opencv笔记1:opencv的基本模块,以及环境搭建 安装系统 使用fedora22-workstation-x86_64 安装opencv sudo dnf install opencv-dev ...

  9. python3.4学习笔记(十一) 列表、数组实例

    python3.4学习笔记(十一) 列表.数组实例 #python列表,数组类型要相同,python不需要指定数据类型,可以把各种类型打包进去#python列表可以包含整数,浮点数,字符串,对象#创建 ...

  10. Go语言学习笔记十一: 切片(slice)

    Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...

随机推荐

  1. eclipse导入maven工程,右键没有build path和工程不能自动编译解决方法

    原文链接:https://blog.csdn.net/wusunshine/article/details/52506389 eclipse导入maven工程,右键没有build path解决方法: ...

  2. URAL_1146/uva_108 最大子矩阵 DP 降维

    题意很简单,给定一个N*N的大矩阵,求其中数值和最大的子矩阵. 一开始找不到怎么DP,没有最优子结构啊,后来聪哥给了我思路,化成一维,变成最大连续和即可.为了转化成一维,必须枚举子矩阵的宽度,通过预处 ...

  3. 转: 十大Intellij IDEA快捷键

    Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论.每个人都有自己的最爱,想排出个理想的榜单还真是困难.以前也整理过Intellij的快捷键,这次就按 ...

  4. ansible下载文件的多种方式

    对于ansible来说,下载文件是一个很重要的课题,这是build或者deploy的第一步,通常来讲由于不同项目的差异,可能我们的代码包或者资源文件保存在于http,github,nexus,ftp, ...

  5. h5-transform二维变换-盾牌还原案例

    就是8张盾牌的拼图 1 <div class="transforms"> <img src="../img/dp1.png" alt=&quo ...

  6. Python笔记_第五篇_Python数据分析基础教程_相关安装和版本查看

    1. IDE说明: 所有的案例用Anacoda中的Jupiter工具进行交互式讲解. 2. 版本和安装: NumPy从如下网站安装:http://sourceforge.net/projects/nu ...

  7. Jshint 安装方法

    首先在编辑器中搜索扩展程序 "Jshint" 并安装,安装成功后 打开Javascript文件会出现报错提示: "Failed to load jshint librar ...

  8. Freemarker的一点延生

    1.freemarker一般不是单独使用,他可以和activeMQ互相结合,来完成功能的. 使用它有 几点好处, 首先就是提高程序效率,一般情况我们的页面都是jsp,而jsp实际上是servlet,在 ...

  9. 干货 | 快速实现数据导入及简单DCS的实现

    干货 | 快速实现数据导入及简单DCS的实现 原创: 赵琦 京东云开发者社区  4月18日 对于多数用户而言,在利用云计算的大数据服务时首先要面临的一个问题就是如何将已有存量数据快捷的导入到大数据仓库 ...

  10. A - Period(kmp的next数组的应用)

    For each prefix of a given string S with N characters (each character has an ASCII code between 97 a ...