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解析json文件相关知识学习
Mar 01 Python
初学python的操作难点总结(新手必看篇)
Aug 03 Python
Python 结巴分词实现关键词抽取分析
Oct 21 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
浅谈Pandas 排序之后索引的问题
Jun 07 Python
对python:threading.Thread类的使用方法详解
Jan 31 Python
Python中Numpy mat的使用详解
May 24 Python
django云端留言板实例详解
Jul 22 Python
python 计算方位角实例(根据两点的坐标计算)
Jan 17 Python
django自带的权限管理Permission用法说明
May 13 Python
浅析PyCharm 的初始设置(知道)
Oct 12 Python
用Python写一个简易版弹球游戏
Apr 13 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数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
linux下php上传文件注意事项
2016/06/11 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
php-msf源码详解
2017/12/25 PHP
jQuery ready函数滥用分析
2011/02/16 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
Vue实现移动端拖拽交换位置
2020/07/29 Javascript
Python正则表达式教程之一:基础篇
2017/03/02 Python
Python爬豆瓣电影实例
2018/02/23 Python
Python理解递归的方法总结
2019/01/28 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
jupyter notebook指定启动目录的方法
2021/03/02 Python
Internet体系结构
2014/12/21 面试题
总裁办公室主任职责
2014/01/02 职场文书
高中化学教学反思
2014/01/13 职场文书
求职自荐信怎么写
2014/03/06 职场文书
索赔员岗位职责
2015/02/15 职场文书
结婚典礼致辞
2015/07/28 职场文书
利用python调用摄像头的实例分析
2021/06/07 Python
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript
使用Python获取字典键对应值的方法
2022/04/26 Python