OpenCV库提供了一个函数,该函数返回二进制(阈值)图像的一组轮廓。 contourArea()可用于查找相关区域。
默认情况下,findContours()输出的轮廓列表是按区域排序的吗?如果没有,是否有人知道按区域排序轮廓列表的cv2函数?
请在Python中提供回复,而不是C。
答案 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]第二大等等。