0
我想遍歷輪廓列表的區域(最高區域到最低區域)。Python OpenCV2:按輪廓區域排序輪廓和樹狀分層結構
我知道做到這一點的一種方法是使用:
_, contours, heirachy = cv2.findContours(image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for contour in sorted(contours, key=cv2.contourArea, reverse=True):
...
不過,我也想這樣做,而迭代被訪問輪廓之間的層次關係 - 在最好的,我想看看有多少輪廓包含在每個外部父母輪廓中,但是我也很樂意簡單地找到內部輪廓父母的外部輪廓。
_, contours, heirachy = cv2.findContours(image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for i in zip(contours, hierarchy):
contour = i[0]
relations = i[1]
x, y, w, h = cv2.boundingRect(contour)
# outer contours:
if relations[3] < 0:
# checks if it is squarish
if 0.85 < (w/h) < 1.1:
corner += 1
if corner == 3:
break
我所用是能夠輪廓壓縮在一起,使它們都可以訪問simultabeously,而且通過他們迭代最高到最低的區域如上面做掙扎。
請注意,這樣做的目的是爲了找到QR碼的三個標記角,所以我希望能夠找到外部輪廓並從最高區域到最低區域進行迭代,以確保首先找到的輪廓是大的角落正方形,而不是QR碼中的較小正方形
某種間接排序,也許? –
@DanMašek你會建議如何去做? – Ronikos
沿着'indices = sorted(range(len(contours)),key = lambda i:cv2.contourArea(contours [i])' –