OpenCV:按区域排序轮廓(Python)

时间:2015-09-19 14:34:07

标签: python opencv computer-vision

OpenCV库提供了一个函数,该函数返回二进制(阈值)图像的一组轮廓。 contourArea()可用于查找相关区域。

默认情况下,findContours()输出的轮廓列表是按区域排序的吗?如果没有,是否有人知道按区域排序轮廓列表的cv2函数?

请在Python中提供回复,而不是C。

2 个答案:

答案 0 :(得分:4)

使用sorted并按区域键排序:

cnts = cv2.findContours(boolImage.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]  
cntsSorted = sorted(cnts, key=lambda x: cv2.contourArea(x))

答案 1 :(得分:1)

image,cnts,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) cnt =已排序(cnts,key = cv2.contourArea)

cnt为您提供一个有序的轮廓列表,按顺序递增w.r.t区域。

您可以通过索引找到轮廓区域: area = cv2.contourArea(cnt [index])

索引可以是1,2,3 ......,len(cnts)

用于访问最大区域轮廓:

CNT [reverse_index]

将reverse_index设为 -1

对于第二大,将reverse_index设为 -2 ,依此类推。

以上也可以通过以下方式实现:

cnt = sorted(cnts,key = cv2.contourArea,reverse = True)

所以cnt [1]给出最大轮廓cnt [2]第二大等等。