OpenCV findContours的顺序相反

时间:2018-06-15 10:03:06

标签: python opencv image-processing

为什么轮廓的顺序相反?我使用轮廓层次结构的RETR_EXTERNAL标志来仅检测外部轮廓

_,等高线,等级= cv2.findContours(connected.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

enter image description here

例如我的输出是r,e B,为什么以相反的顺序?

1 个答案:

答案 0 :(得分:3)

可以使用一些启发式来对轮廓进行排序。以下示例使用每个轮廓的最小x坐标对它们进行排序:

import cv2
import numpy as np

img = cv2.imread('BB7eu.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

contours.sort(key=lambda c: np.min(c[:,:,0]))

for i in range(len(contours)):
    cur = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
    cv2.drawContours(cur, contours, i, (0,0,255), -1)
    cv2.putText(cur, "i=%d" % i, (140,90), cv2.FONT_HERSHEY_PLAIN, 1, (0,255,255), 1)
    cv2.imshow("img", cur)
    cv2.waitKey()

您将看到轮廓“按顺序”突出显示:B,e,r。

enter image description here enter image description here enter image description here