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 03 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
django数据库migrate失败的解决方法解析
Feb 08 Python
python寻找list中最大值、最小值并返回其所在位置的方法
Jun 27 Python
解决tensorflow模型参数保存和加载的问题
Jul 26 Python
详解python中*号的用法
Oct 21 Python
Pytorch实现的手写数字mnist识别功能完整示例
Dec 13 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
Mar 02 Python
Python实现井字棋小游戏
Mar 09 Python
增大python字体的方法步骤
Jul 05 Python
Python 使用生成器代替线程的方法
Aug 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
使用PHP的日期与时间函数技巧
2008/04/24 PHP
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
php pack与unpack 摸板字符字符含义
2009/10/29 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
Python的词法分析与语法分析
2013/05/18 Python
python中enumerate函数用法实例分析
2015/05/20 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
Django choices下拉列表绑定实例
2020/03/13 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
班组长安全工作职责
2014/07/15 职场文书
2014年质检员工作总结
2014/11/18 职场文书
vue使用element-ui按需引入
2022/05/20 Vue.js
字节飞书面试promise.all实现示例
2022/06/16 Javascript