Python 如何从角点检测给出的点阵列中检测特定的坐标点?

Python 如何从角点检测给出的点阵列中检测特定的坐标点?,python,numpy,opencv,image-processing,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 = n

我有一个人的头部图像,从中我检测到了角点。以下是我的代码和结果:

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()
头部图像:

检测到角点:

在这里,我试图指出只有两个角落在颈部地区(最低的那个些在上面的图片)。为此,我从角的numpy数组中找出max y,并用红点绘制点。但是,它在眼睛里画红点。我做错了什么


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

问题在这一行:

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)

您需要跟踪对应的x坐标这是100%正确的:P角的形状和数据类型是什么?角的形状是什么意思?如果您所指的是image.shape,则为522乘522。数据类型是unit8。我指的是
corners=np.int0(corners)