如何从角点检测给出的点数组中检测特定的坐标点?

时间:2019-01-03 10:17:05

标签: python numpy opencv image-processing

我有一个人的头像,从中我可以检测到拐角点。这是我的代码及其结果:

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

在这里,我试图指出颈部的两个角(上图中的最低点)。为此,我从角的numpy数组中找出最大值y并将该点绘制为红色点。但是,其绘制的红点在眼前。我在做什么错了?

如何找出颈部的坐标点(仅最低2个角点)?

1 个答案:

答案 0 :(得分:1)

问题出在这一行:

z = np.max(y)

此处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)