我希望按区域(最高区域到最低区域)迭代轮廓列表。
我知道一种方法是使用:
_, contours, heirachy = cv2.findContours(image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for contour in sorted(contours, key=cv2.contourArea, reverse=True):
...
然而,我还想做的是在迭代时访问轮廓之间的层次关系 - 充其量我希望看到每个外部父项轮廓中包含多少轮廓,但是我也很乐意只是找到外轮廓那是内心轮廓的父母。
_, contours, hierarchy = 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码的三个标记角,所以我希望能够找到外部轮廓并且还从最高区域到最低区域迭代,以确保首先找到的轮廓是大角点正方形而不是QR码中较小的正方形