cv2.findContours()返回函数详解

news/2024/11/15 3:25:17/

对于cv2.findContours() 函数,相信很多人都在使用,利用其进行轮廓的寻找,之后利用cnt[num],对第num个轮廓进行操作,但是该函数返回的三个参数具体表示的是什么呢?

下面就进行详细介绍,为了能够使读者更加深入的理解,利用下面的例程进行具体分析。
在这里插入图片描述
Python程序如下:

improve cv2
improve numpy as np
img=cv2.imread('test.jpg')
imgray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh=cv2.thrshold(imgray,127,255,0)
image,cnts,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.imshow('imageshow',image)  # 显示返回值image,其实与输入参数的thresh原图没啥区别
cv2.waitKey()
print(np.size(cnts))  #   得到该图中总的轮廓数量
print(cnts[0])   #  打印出第一个轮廓的所有点的坐标, 更改此处的0,为0--(总轮廓数-1),可打印出相应轮廓所有点的坐标
print(hierarchy) #打印出相应轮廓之间的关系
img=cv2.drawCountours(img,[cnts[0]],-1,(0,255,0),10)  #标记处编号为0的轮廓
cv2.imshow('drawimg',img)
cv2.waitKey()

输出结果为:

5  ###说明总轮廓是为5
[[[272 421]]  #编号为0的轮廓的一系列坐标值[[270 423]]
......
......[[274 421]]

###各轮廓间关系
[[[ 1 -1 -1 -1] #轮廓0

[ 4 0 2 -1] #轮廓1

[-1 -1 3 1] #轮廓2

[-1 -1 -1 2] #轮廓3

[-1 1 -1 -1]]] #轮廓4

下面具体解释下hierarchy输出的矩阵参数的意义

其输出矩矩阵大小为NXM, 其中N为轮廓的个数,M恒等于4,也就是说每一行的4个数,能够表示出轮廓间的相互关系,那么具体是怎样表示的呢

第一个数:表示同一级轮廓的下个轮廓的编号,如果这一级轮廓没有下一个轮廓,一般是这一级轮廓的最后一个的时候,则为-1

第二个数:表示同一级轮廓的上个轮廓的编号,如果这一级轮廓没有上一个轮廓,一般是这一级轮廓的第一个的时候,则为-1

第三个数:表示该轮廓包含的下一级轮廓的第一个的编号,假如没有,则为-1

第四个数: 表示该轮廓的上一级轮廓的编号,假如没有上一级,则为-1

废话不多说,直接上图,标记处各轮廓间层次关系及编号

在这里插入图片描述
具体分析证明:

[[[ 1 -1 -1 -1]   #轮廓0   [ 4  0  2 -1]   #轮廓1[-1 -1  3  1]   #轮廓2[-1 -1 -1  2]   #轮廓3[-1  1 -1 -1]]] #轮廓4

轮廓0,它的同级下一个的编号为1,第一个参数为1; 因为这一级别的第一个,第二个参数-1;因为不包含子轮廓,所以第三个参数-1;因为处于第一级,其不属于任何别的级别,所以第四个参数为-1

轮廓1,它的同级下一个的编号为4,第一个参数为4; 因为这一级别的上一个的编号为0,第二个参数0;因为包含子轮廓,且子轮廓的第一个编号(当然只包含一个,多个也是同样的道理)为2,所以第三个参数2;因为处于第一级,其不属于任何别的级别,所以第四个参数为-1

轮廓2,它是第二级的最后一个(因为只有一个),所以第一个参数为-1; 它也是第二级的第一个,所以第二个参数为-1;因为包含子轮廓,且子轮廓的第一个编号(当然只包含一个,多个也是同样的道理)为3,所以第三个参数3; 因为处于第二级,其属于上一级的轮廓1,所以第四个参数为1

依次类推 。。。。。轮廓3

轮廓4 它是同一级(第一级)的最后一个,因此第一个参数为-1;因为这一级别的上一个的编号为1,第二个参数1;因为不包含子轮廓,所以第三个参数-1;因为处于第一级,其不属于任何别的级别,所以第四个参数为-1


http://www.ppmy.cn/news/325381.html

相关文章

OpenCv查找轮廓-cv2.findContours()函数

contours, hier cv2.findContours(img,mode,method) 参数: 1. img: 要寻找轮廓的图像 2. mode:轮廓的检索模式(四种) 1.cv2.RETR_EXTERNAL 表示只检测外轮廓 2.cv2.RETR_LIST 检测的轮廓不建立等级关系 3.cv2.RETR_CCOMP 建立两个等级的轮…

图像轮廓检索函数cv2.findContours

findContours findContours函数主要作用是从二值图中检索轮廓。 用法 import cv2cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])参数 image:8-bit单通道图像。该图像会将非0像素值视为1,0像素值视为0,因此也…

在cv2.findContours函数使用中,报ValueError: not enough values to unpack (expected 3, got 2)

cv2.findContours()函数 cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]]) 其中 第一个参数是需要寻找轮廓的图像; 第二个参数是轮廓的检索模式,有四种方式: cv2.RETR_EXTERNAL表示只检测外轮廓cv2.RETR_LIST检…

cv2.cv2.findContours opencv-python

cv2.findContours用于轮廓检测,其输入为二值图像 输入: 有三个输入参数:输入图像(二值图像),轮廓检索方式,轮廓近似方法 轮廓检索方式 mode 含义 cv2.RETR_EXTERNAL 只检测外轮廓信息 cv2.RETR…

python-opencv2利用cv2.findContours()函数来查找检测物体的轮廓

版权声明:本文为CSDN博主「hjxu2016」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/hjxu2016/article/details/77833336 轮廓检测 轮廓检测也是图像处理中经常用到的…

cv2.threshold()、cv2.findContours(),cv2.findContours图片轮廓处理

参数及含义cv2.threshold threshold(src, thresh, maxval, type[, dst]) -> retval, dst,第一个返回值是**阈值**的float型,第二个返回值是图片像素处理后的结果。cv2.threshold(img,threshold,maxval,type) img:必须是灰度图,是8-bit或3…

cv2.findContours() 图像的轮廓

cv2.findContours(image, mode, method, contoursNone, hierarchyNone, offsetNone)参数: image:寻找轮廓的图像,注意输入的图片必须为二值图片。若输入的图片为彩色图片,必须先进行灰度化和二值化 mode:轮廓的检索模…

cv2.findcontours返回值

cv2.findContours() 函数返回值是三个参数: contours:图像轮廓的列表,其中每个轮廓是一个 Numpy 数组,包含该轮廓上的所有点的坐标。 hierarchy:图像中各轮廓的层次关系的信息,表示轮廓的父轮廓、子轮廓和兄…