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实现根据IP地址和子网掩码算出网段的方法
Jul 30 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
浅谈numpy生成数组的零值问题
Nov 12 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
python 实现图片旋转 上下左右 180度旋转的示例
Jan 24 Python
selenium跳过webdriver检测并模拟登录淘宝
Jun 12 Python
Python Tkinter模块 GUI 可视化实例
Nov 20 Python
python关于调用函数外的变量实例
Dec 26 Python
在tensorflow中实现去除不足一个batch的数据
Jan 20 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 Python
总结Python使用过程中的bug
Jun 18 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
JavaScript进阶教程(第四课第一部分)
2007/04/05 Javascript
js停止输出代码
2008/07/20 Javascript
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
跟老齐学Python之模块的加载
2014/10/24 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
python运行其他程序的实现方法
2017/07/14 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
Python爬取豆瓣视频信息代码实例
2019/11/16 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
会计学应届毕业生推荐信
2013/11/04 职场文书
铁路工务反思材料
2014/02/07 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
社区助残日活动总结
2014/08/29 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
英文版辞职信
2015/02/28 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏