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下的twisted框架入门指引
Apr 15 Python
简单的python后台管理程序
Apr 13 Python
Python中生成Epoch的方法
Apr 26 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
对python条件表达式的四种实现方法小结
Jan 30 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
Python获取好友地区分布及好友性别分布情况代码详解
Jul 10 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
python scrapy重复执行实现代码详解
Dec 28 Python
Python实现EM算法实例代码
Oct 04 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查询搜索引擎排名位置的代码
2010/01/05 PHP
浅析PHP 按位与或 (^ 、&)
2013/06/21 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
Git命令之分支详解
2021/03/02 PHP
Javascript - HTML的request类
2007/01/09 Javascript
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
2016/05/25 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
python实现每次处理一个字符的三种方法
2014/10/09 Python
Python端口扫描简单程序
2016/11/10 Python
Python运算符重载详解及实例代码
2017/03/07 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
重构Python代码的六个实例
2020/11/25 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
城市观光通行证:The Sightseeing Pass
2018/04/28 全球购物
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
幼儿园大班教学反思
2014/02/10 职场文书
公司年会抽奖活动主持词
2014/03/31 职场文书
成绩单家长评语大全
2014/04/16 职场文书
销售竞赛活动方案
2014/08/23 职场文书
婚礼父母答谢词
2015/01/04 职场文书
教师求职简历自我评价
2015/03/10 职场文书
2015年毕业生实习评语
2015/03/25 职场文书