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虚拟环境virualenv的安装与使用
Dec 18 Python
PyCharm安装第三方库如Requests的图文教程
May 18 Python
Pycharm 设置默认头的图文教程
Jan 17 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
python3 实现的对象与json相互转换操作示例
Aug 17 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
如何运行带参数的python脚本
Nov 15 Python
Python 复平面绘图实例
Nov 21 Python
python输出数组中指定元素的所有索引示例
Dec 06 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
python excel多行合并的方法
Dec 09 Python
Pytorch 中的optimizer使用说明
Mar 03 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
星际争霸任务指南——神族
2020/03/04 星际争霸
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
2019/09/23 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
Python基础知识点 初识Python.md
2019/05/14 Python
Django获取应用下的所有models的例子
2019/08/30 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
python右对齐的实例方法
2020/07/05 Python
python实现暗通道去雾算法的示例
2020/09/27 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
党员政治学习材料
2014/05/14 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python