2016-12-01 225 views
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碼中的較小正方形

+0

某種間接排序,也許? –

+0

@DanMašek你會建議如何去做? – Ronikos

+0

沿着'indices = sorted(range(len(contours)),key = lambda i:cv2.contourArea(contours [i])' –

回答

0

在編碼方面非常新穎。想知道是否缺少索引?

for x, y in zip(a, b): 
    # x is from a, y is from b