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实现socket客户端和服务端简单示例
Feb 24 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
Jan 22 Python
Python常见内置高效率函数用法示例
Jul 31 Python
对python pandas读取剪贴板内容的方法详解
Jan 24 Python
python+logging+yaml实现日志分割
Jul 22 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
Jul 25 Python
Python 取numpy数组的某几行某几列方法
Oct 24 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
Mar 24 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
python 多线程爬取壁纸网站的示例
Feb 20 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+MYSQL 出现乱码的解决方法
2008/08/08 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
移动端界面的适配
2017/01/11 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
2017/01/20 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
Python脚本暴力破解栅栏密码
2015/10/19 Python
批处理与python代码混合编程的方法
2016/05/19 Python
Python三级菜单的实例
2017/09/13 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
浅析Django中关于session的使用
2019/12/30 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
公司行政助理岗位职责
2015/04/11 职场文书
朋友离别感言
2015/08/04 职场文书
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android
正则表达式基础与常用验证表达式
2022/06/16 Javascript