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):
...
をしかし、私はまた、反復しながら、輪郭の間の階層関係にアクセスされて何をしたいのか - 最高の状態で、私はどのように多く見たいです輪郭は各外側の親輪郭内に含まれていますが、内側輪郭の親である外側輪郭を見つけるだけで幸せです。
私は、彼らは両方のsimultabeouslyアクセスできるように一緒に輪郭を圧縮するだけでなく、上記のように行わ最低面積の高いものからそれらを反復処理することができることに苦しんでされていますどのような_, 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
。
これは、QRコードの3つのマークされたコーナーを見つけることです。そのため、最初に輪郭が見つかるように、外側の輪郭を見つけ出し、最も高い領域から最も低い領域まで繰り返すことができるようにしたい大きな角の正方形であり、QRコード内の小さな四角形ではありません。
何らかの間接的な並べ替え、おそらく? –
@DanMašekあなたはそれについてどう思いますか? – Ronikos
'indices = sorted(range(len(contours))、key = lambda i:cv2.contourArea(contours [i]))の行に沿ったもの' –