Dav*_*ked 2 python opencv computer-vision
OpenCV库提供了为二进制(阈值)图像返回一组轮廓的函数。SilhouetteArea()可以用于查找关联的区域。
默认情况下,findContours()输出的轮廓列表是否按面积排序?如果不是,是否有人知道按区域排序轮廓列表的cv2函数?
请以Python而非C语言提供回应。
Kan*_*hew 13
image, cnts, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cnt = sorted(cnts, key=cv2.contourArea)
Run Code Online (Sandbox Code Playgroud)
cnt为您提供一个按区域递增顺序排列的轮廓的有序列表。
您可以通过索引找到轮廓面积:
area = cv2.contourArea(cnt[index])
Run Code Online (Sandbox Code Playgroud)
索引可以是1,2,3.....,len(cnts)
要访问最大面积轮廓:
cnt[reverse_index]
Run Code Online (Sandbox Code Playgroud)
将reverse_index设置为-1
对于第二大的,将reverse_index设置为-2,依此类推。
上述也可以通过以下方式实现:
cnt = sorted(cnts, key=cv2.contourArea, reverse=True)
Run Code Online (Sandbox Code Playgroud)
所以 cnt[1] 给出最大的轮廓 cnt[2] 第二大,依此类推。
使用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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7664 次 |
| 最近记录: |