python-opencv在有噪音的情况下提取图像的轮廓实例


Posted in Python onAugust 30, 2017

对于一般的图像提取轮廓,介绍了一个很好的方法,但是对于有噪声的图像,并不能很好地捕获到目标物体。

比如对于我的鼠标,提取的轮廓效果并不好,因为噪声很多:

python-opencv在有噪音的情况下提取图像的轮廓实例

所以本文增加了去掉噪声的部分。

首先加载原始图像,并显示图像

img = cv2.imread("temp.jpg")    #载入图像
h, w = img.shape[:2]      #获取图像的高和宽 
cv2.imshow("Origin", img)

python-opencv在有噪音的情况下提取图像的轮廓实例

然后进行低通滤波处理,进行降噪

blured = cv2.blur(img,(5,5))    #进行滤波去掉噪声
cv2.imshow("Blur", blured)     #显示低通滤波后的图像

python-opencv在有噪音的情况下提取图像的轮廓实例

使用floodfill来去掉目标周围的背景,泛洪填充类始于ps的魔棒工具,这里用来清除背景。

python-opencv在有噪音的情况下提取图像的轮廓实例

然后转换成灰度图

gray = cv2.cvtColor(blured,cv2.COLOR_BGR2GRAY) 
cv2.imshow("gray", gray)

python-opencv在有噪音的情况下提取图像的轮廓实例

此时目标图像周围有写不光滑,还有一些噪声,因此进行开闭运算,得到比较光滑的目标

#定义结构元素 
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(50, 50))
#开闭运算,先开运算去除背景噪声,再继续闭运算填充目标内的孔洞
opened = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel) 
closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel) 
cv2.imshow("closed", closed)

python-opencv在有噪音的情况下提取图像的轮廓实例

接着转换成二值图以便于获取图像的轮廓

python-opencv在有噪音的情况下提取图像的轮廓实例

最后进行轮廓提取,抓取到目标

#找到轮廓
_,contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 
#绘制轮廓
cv2.drawContours(img,contours,-1,(0,0,255),3) 
#绘制结果
cv2.imshow("result", img)

python-opencv在有噪音的情况下提取图像的轮廓实例

全部代码如下

#coding=utf-8 
import cv2 
import numpy as np

img = cv2.imread("temp.jpg")    #载入图像
h, w = img.shape[:2]      #获取图像的高和宽 
cv2.imshow("Origin", img)     #显示原始图像

blured = cv2.blur(img,(5,5))    #进行滤波去掉噪声
cv2.imshow("Blur", blured)     #显示低通滤波后的图像

mask = np.zeros((h+2, w+2), np.uint8)  #掩码长和宽都比输入图像多两个像素点,满水填充不会超出掩码的非零边缘 
#进行泛洪填充
cv2.floodFill(blured, mask, (w-1,h-1), (255,255,255), (2,2,2),(3,3,3),8)
cv2.imshow("floodfill", blured) 

#得到灰度图
gray = cv2.cvtColor(blured,cv2.COLOR_BGR2GRAY) 
cv2.imshow("gray", gray) 


#定义结构元素 
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(50, 50))
#开闭运算,先开运算去除背景噪声,再继续闭运算填充目标内的孔洞
opened = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel) 
closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel) 
cv2.imshow("closed", closed) 

#求二值图
ret, binary = cv2.threshold(closed,250,255,cv2.THRESH_BINARY) 
cv2.imshow("binary", binary) 

#找到轮廓
_,contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 
#绘制轮廓

cv2.drawContours(img,contours,-1,(0,0,255),3) 
#绘制结果
cv2.imshow("result", img)

cv2.waitKey(0) 
cv2.destroyAllWindows()

以上这篇python-opencv在有噪音的情况下提取图像的轮廓实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python获取远程图片大小和尺寸的方法
Mar 26 Python
使用Python的Scrapy框架编写web爬虫的简单示例
Apr 17 Python
python实现class对象转换成json/字典的方法
Mar 11 Python
Python用模块pytz来转换时区
Aug 19 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
老生常谈进程线程协程那些事儿
Jul 24 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 Python
Python如何使用队列方式实现多线程爬虫
May 12 Python
Python web如何在IIS发布应用过程解析
May 27 Python
Python中pass的作用与使用教程
Nov 13 Python
在pyCharm中下载第三方库的方法
Apr 18 Python
Python移位密码、仿射变换解密实例代码
Jun 27 Python
关于python的list相关知识(推荐)
Aug 30 #Python
Python编程实现正则删除命令功能
Aug 30 #Python
Python删除Java源文件中全部注释的实现方法
Aug 30 #Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 #Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 #Python
Python导入模块时遇到的错误分析
Aug 30 #Python
简单学习Python多进程Multiprocessing
Aug 29 #Python
You might like
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
PHP使用CURL模拟登录的方法
2015/07/08 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
jquery实现拖动效果
2016/08/10 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
vue router demo详解
2017/10/13 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
numpy向空的二维数组中添加元素的方法
2018/11/01 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
在python中使用nohup命令说明
2020/04/16 Python
python中取绝对值简单方法总结
2020/07/24 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
一年级语文教学反思
2014/02/13 职场文书
会计求职信范文
2014/05/24 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书