Я хочу перебирать список контуров по их площади (самая высокая область до самого низкого).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 (контуры [i]))' –