Избавление от внутренних контуров каркаса в OpenCV и сохранение иерархии - PullRequest
0 голосов
/ 01 октября 2019

Для данного изображения Функция OpenCV findContours извлекает этот результат как внутренний, так и внешний контуры линии. Мне нужно определение одного контура на коробку . Я пробовал другие методы поиска, такие как list и external, но иерархия и внутренние элементы требуются . Я также написал некоторый код, пытающийся игнорировать контуры, которые являются первыми дочерними элементами, ширина и высота которых действительно близки, но исправление иерархии - беспорядок. Я также перерисовал контуры, чтобы максимизировать контраст, но функция дает мне два контура, внутренний и внешний с одинаковой шириной и высотой.

PD: возможно иметь все виды иерархии как это , это потому, что специальное решение, проверяющее только родитель или потомки, не будет работать.

Это базовый код, который печатает все контуры (Python 3.7 и OpenCV 4.1.1):

import cv2
import numpy as np
import imutils

image = 255-cv2.imread('images/3boxes.png',0) #Inverted image to detect white lines
image = imutils.resize(image, width=600) 

contourns, hierarchy = cv2.findContours(image.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 
#Twice because grab_contours and hierarchy retrieval doesn't work properly
contourns = cv2.findContours(image.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 
contourns = imutils.grab_contours(contourns)

image = cv2.cvtColor(image,cv2.COLOR_GRAY2RGB)
ocurr = 0
for c in contourns:
    ocurr = ocurr + 1
    # Compute the center of the contour
    M = cv2.moments(c)
    cX = int((M["m10"] / M["m00"]))
    cY = int((M["m01"] / M["m00"]))

    x,y,w,h = cv2.boundingRect(c)
    cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),1)
    label = "E" + str(ocurr) + " (" + str(w) + ", " + str(h) + ")"
    cv2.putText(image, label, (cX, cY), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)

cv2.imshow("Result", image)
cv2.waitKey(0)

Спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...