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实现复制整个目录的方法
May 12 Python
Python实现将不规范的英文名字首字母大写
Nov 15 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
python使用pycharm环境调用opencv库
Feb 11 Python
python奇偶行分开存储实现代码
Mar 19 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
对python实现模板生成脚本的方法详解
Jan 30 Python
python实现126邮箱发送邮件
May 20 Python
jupyter notebook快速入门及使用详解
Nov 13 Python
用Python制作音乐海报
Jan 26 Python
Python基础之条件语句详解
Jun 16 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中Fatal error session_start()错误解决步骤
2014/08/05 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
PHP封装XML和JSON格式数据接口操作示例
2019/03/06 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
Python3实现飞机大战游戏
2020/04/24 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
Conforama瑞士:家具、厨房、电器、装饰
2020/09/06 全球购物
中文系师范生自荐信
2013/10/01 职场文书
单位实习证明怎么写
2014/01/17 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
2014年党支部学习材料
2014/05/19 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
门面房租房协议书
2014/12/01 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers
Django框架模板用法详解
2022/06/10 Python