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代码的打包与发布详解
Jul 30 Python
使用Python的Flask框架实现视频的流媒体传输
Mar 31 Python
用Python的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
Python脚本判断 Linux 是否运行在虚拟机上
Apr 25 Python
python中字符串前面加r的作用
Jun 04 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
django 发送邮件和缓存的实现代码
Jul 18 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
Python集中化管理平台Ansible介绍与YAML简介
Jun 12 Python
django最快程序开发流程详解
Jul 19 Python
分享PyCharm的几个使用技巧
Nov 10 Python
Python爬虫实现模拟点击动态页面
Mar 05 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
Zend的MVC机制使用分析(二)
2013/05/02 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
PHP7 新增常量
2021/03/09 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
ipython和python区别详解
2019/06/26 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
python实现学生成绩测评系统
2020/06/22 Python
Python用access判断文件是否被占用的实例方法
2020/12/17 Python
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
Ref与out有什么不同
2012/11/24 面试题
环境科学专业个人求职信
2013/12/15 职场文书
企业安全标语
2014/06/07 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
小学教学工作总结2015
2015/05/13 职场文书
幼儿园亲子活动感想
2015/08/07 职场文书
大学生十八大感想
2015/08/11 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书