Python+OpenCV图像处理——实现轮廓发现


Posted in Python onOctober 23, 2020

简介:轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果。

代码如下:

import cv2 as cv
import numpy as np
def contours_demo(image):
  dst = cv.GaussianBlur(image, (3, 3), 0) #高斯模糊去噪
  gray = cv.cvtColor(dst, cv.COLOR_RGB2GRAY)
  ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) #用大律法、全局自适应阈值方法进行图像二值化
  cv.imshow("binary image", binary)
  cloneTmage, contours, heriachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
  for i, contour in enumerate(contours):
    cv.drawContours(image, contours, i, (0, 0, 255), 2)
    print(i)
  cv.imshow("contours", image)
  for i, contour in enumerate(contours):
    cv.drawContours(image, contours, i, (0, 0, 255), -1)
  cv.imshow("pcontours", image)
src = cv.imread('E:/imageload/coins.jpg')
cv.namedWindow('input_image', cv.WINDOW_NORMAL) #设置为WINDOW_NORMAL可以任意缩放
cv.imshow('input_image', src)
contours_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果:

Python+OpenCV图像处理——实现轮廓发现

注意:

1.Opencv发现轮廓的函数原型为:findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> image, contours, hierarchy

image参数表示8位单通道图像矩阵,可以是灰度图,但更常用的是二值图像,一般是经过Canny、拉普拉斯等边缘检测算子处理过的二值图像。

mode参数表示轮廓检索模式:

①CV_RETR_EXTERNAL:只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略。

②CV_RETR_LIST:检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系,彼此之间独立,没有等级关系,这就意味着这个检索模式下不存在父轮廓或内嵌轮廓。

③CV_RETR_CCOMP:检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层,若外围内的内围轮廓还包含了其他的轮廓信息,则内围内的所有轮廓均归属于顶层。

④CV_RETR_TREE:检测所有轮廓,所有轮廓建立一个等级树结构,外层轮廓包含内层轮廓,内层轮廓还可以继续包含内嵌轮廓。

method参数表示轮廓的近似方法:

①CV_CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max (abs (x1 - x2), abs(y2 - y1) == 1。

②CV_CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息。

③CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法。

contours参数是一个list,表示存储的每个轮廓的点集合。

hierarchy参数是一个list,list中元素个数和轮廓个数相同,每个轮廓contours[i]对应4个hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,则该值为负数。

offset参数表示每个轮廓点移动的可选偏移量。

2.Opencv绘制轮廓的函数原型为:drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]]) -> image

imgae参数表示目标图像。

contours参数表示所有输入轮廓。

contourIdx参数表示绘制轮廓list中的哪条轮廓, 如果是负数,则绘制所有轮廓。

color参数表示轮廓的颜色。

thickness参数表示绘制的轮廓线条粗细,如果是负数,则绘制轮廓内部。

lineType参数表示线型。

hierarchy参数表示有关层次结构的可选信息。

maxLevel参数表示绘制轮廓的最大级别。 如果为0,则仅绘制指定的轮廓。 如果为1,则该函数绘制轮廓和所有嵌套轮廓。 如果为2,则该函数绘制轮廓,所有嵌套轮廓,所有嵌套到嵌套的轮廓,等等。 仅当有可用的层次结构时才考虑此参数。

offset参数表示可选的轮廓偏移参数,该参数可按指定的方式移动所有绘制的轮廓。

以上就是Python+OpenCV图像处理——实现轮廓发现的详细内容,更多关于python 轮廓发现的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
Python Django使用forms来实现评论功能
Aug 17 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
一篇文章快速了解Python的GIL
Jan 12 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
Python中捕获键盘的方式详解
Mar 28 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 Python
python中append实例用法总结
Jul 30 Python
Python字典推导式将cookie字符串转化为字典解析
Aug 10 Python
wxPython实现绘图小例子
Nov 19 Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 Python
python 带时区的日期格式化操作
Oct 23 #Python
Python可视化工具如何实现动态图表
Oct 23 #Python
python 匿名函数与三元运算学习笔记
Oct 23 #Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 #Python
Python+OpenCV图像处理——实现直线检测
Oct 23 #Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 #Python
Python 列表推导式需要注意的地方
Oct 23 #Python
You might like
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
php strftime函数的详细用法
2018/06/21 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
在python中实现对list求和及求积
2018/11/14 Python
python调用外部程序的实操步骤
2019/03/04 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
计算机应用专业毕业生求职信
2013/10/24 职场文书
毕业生个人求职信范文分享
2014/01/05 职场文书
护校行动方案
2014/05/31 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
2015年项目工作总结
2015/04/29 职场文书
大学运动会通讯稿
2015/07/18 职场文书
maven依赖的version声明控制方式
2022/01/18 Java/Android
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python