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

下面就进行详细介绍,为了能够使读者更加深入的理解,利用下面的例程进行具体分析。

准备材料:图片一张(作者手动画图软件绘制的)

findcontours函数python findcontours函数返回一个list对象_opencv


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