【问题标题】:How to detect the specific coordinate points from array of points given by corner detection?如何从角点检测给出的点数组中检测特定坐标点?
【发布时间】:2019-01-03 10:17:05
【问题描述】:

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

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 数组中找出最大 y 并用红点绘制点。但是,它在眼睛中绘制红点。我做错了什么?

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

【问题讨论】:

  • 角的形状和dtype是什么?
  • 角的形状是什么意思?如果您指的是 image.shape,则它是 522 x 522。Dtype 是 unit8。
  • 我指的是corners = np.int0(corners)

标签: python numpy opencv image-processing


【解决方案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)

【讨论】:

  • 您需要跟踪对应的 x坐标
  • 这是 100% 正确的:p
猜你喜欢
  • 2016-06-26
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多