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

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()

头像:

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

检测到角点:

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

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

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

最佳答案

问题在这一行:

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)

09-26 06:01