найти прямоугольные внутренние угловые точки - PullRequest
0 голосов
/ 03 июля 2018

У меня есть двоичное изображение, как показано ниже, где я должен найти внутренние угловые точки прямоугольника. Я пытался использовать функцию OpenCV findcontours , чтобы получить границу прямоугольника и затем угловые точки, но она не предоставляет точные местоположения точек, которые я ищу (она дает внешние угловые точки ). Любая идея или метод для решения проблемы? input

1 Ответ

0 голосов
/ 03 июля 2018

Как уже упоминалось в комментариях, вам нужно использовать cv2.RETR_CCOMP. Следующая реализация в Python:

img = cv2.imread(os.path.join(r'C:\Users\Jackson\Desktop\stack\contour', FILE_NAME))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Don't use magic numbers
thresh = cv2.threshold(gray, thresh=BLACK_THRESHOLD, maxval=255, type=cv2.THRESH_BINARY)[1]

#--- Find the contours ---
_, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)

#--- get hierarchy descriptions ---
print(hierarchy)

возвращается:

[[-1 -1  1 -1]
 [-1 -1 -1  0]]

Что это значит?

Иерархия помогает установить отношения родитель-потомок между контурами. Дочерние контуры - это контуры внутри внешних контуров, называемые иначе родителями.

Иерархия возвращает массив со следующим значением:

[Next, Previous, First_Child, Parent]

ЭТОТ ДОКТОР проливает много света на эту тему.

#--- creating a copy of original image ---
img2 = img.copy()

#--- checking whether the contour in hierarchy is a child and if it is then draw it ---
for i in hierarchy:
    print(i)
    if i[2] > 0:      
        cv2.drawContours(img2, [contours[i[2]]], 0, (0,255,0), 2)

cv2.imshow('img2', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

enter image description here

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