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开发vim插件及心得分享
Nov 04 Python
python操作gmail实例
Jan 14 Python
Python单元测试框架unittest简明使用实例
Apr 13 Python
利用python发送和接收邮件
Sep 27 Python
对python 各种删除文件失败的处理方式分享
Apr 24 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
在Pycharm中将pyinstaller加入External Tools的方法
Jan 16 Python
python暴力解压rar加密文件过程详解
Jul 05 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
Sep 20 Python
python 实现学生信息管理系统的示例
Nov 28 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
Python制作表白爱心合集
Jan 22 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
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
基于ssm框架实现layui分页效果
2019/07/27 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
Python虚拟环境项目实例
2017/11/20 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
python基础教程之while循环
2019/08/14 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
struct与class的区别
2014/02/03 面试题
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
活动总结模板
2014/05/09 职场文书
党组织领导班子整改方案
2014/10/25 职场文书