Как определить конкретные координатные точки из массива точек, заданных при обнаружении углов? - PullRequest
0 голосов
/ 03 января 2019

У меня есть изображение головы человека, из которого я обнаружил угловые точки. Вот мой код и результат из него:

import cv2
import numpy as np

Head = cv2.imread('Head.jpg')

#Corner detection
gray = cv2.cvtColor(Head, cv2.COLOR_BGR2GRAY)
gray  = np.float32(gray)

corners = cv2.goodFeaturesToTrack(gray, 50, 0.01, 10)
corners = np.int0(corners)

for corner in corners:
    x,y = corner.ravel()
    cv2.circle(Head, (x,y), 3, 255, -1)

z = np.max(y)
cv2.circle(Head, (x,z), 5, (0,0,255), -1)

cv2.imshow('Corner', Head)
cv2.waitKey(0)
cv2.destroyAllWindows()

Изображение головы:

Head.jpg

Обнаружен угол:

Corner Points

Здесь я пытаюсь указать только два угла в области шеи (самые низкие на изображении выше). Для этого я нахожу максимальное значение из массива углов и отображаю точку в красной точке. Но, оно строит красную точку в глазу. Что я делаю не так?

Как узнать координаты точек шеи (только самые нижние 2 угловые точки) ??

1 Ответ

0 голосов
/ 03 января 2019

Проблема в этой строке:

z = np.max(y)

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

ordered_coords = [ corner.ravel() for corner in corners ]
ordered_coords.sort(key=lambda x: x[1])

Два искомых угла с наибольшим значением y будут последними двумя элементами в списке.

cv2.circle(Head, ordered_coords[-1], 5, (0,0,255), -1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...