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 相关文章推荐
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
python如何查看系统网络流量的信息
Sep 12 Python
Python写的一个定时重跑获取数据库数据
Dec 28 Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 Python
python表格存取的方法
Mar 07 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
PyQt5显示GIF图片的方法
Jun 17 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
对python中return与yield的区别详解
Mar 12 Python
Python列表如何更新值
May 27 Python
python 基于opencv实现图像增强
Dec 23 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 8小时时间差的解决方法小结
2009/12/22 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
轻松掌握JavaScript代理模式
2016/08/26 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
Pytorch中Tensor与各种图像格式的相互转化详解
2019/12/26 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
详解python中的lambda与sorted函数
2020/09/04 Python
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
运动会解说词200字
2014/02/06 职场文书
争先创优心得体会
2014/09/12 职场文书
卖房协议书样本
2014/10/30 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
小学运动会加油稿
2015/07/22 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle
Python中requests库的用法详解
2022/06/05 Python