为什么轮廓的顺序相反?我使用轮廓层次结构的RETR_EXTERNAL标志来仅检测外部轮廓
_,等高线,等级= cv2.findContours(connected.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
例如我的输出是r,e B,为什么以相反的顺序?
答案 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。