gpt4 book ai didi

python - 尝试从点列表中找到离屏幕中间最近的点

转载 作者:太空宇宙 更新时间:2023-11-03 21:32:46 26 4
gpt4 key购买 nike

我正在尝试在生成的列表关键点中找到最接近 840、525 的坐标。

背景:我一直在研究一个系统,将屏幕中心的一个 blob(OpenCV 给出每个中心的坐标)移动到其他地方的另一个 blob,一次有多个生成的 blob,但我想去离我中间位置最近的 Blob (840、525)。 Blob 是由 OpenCV 发现的。这一刻由我的鼠标控制,因为中间的 Blob 移动到我的鼠标指针的坐标。

目前它只是将光标放在它找到的第一个点上。

detector = cv2.SimpleBlobDetector_create(params)

# Detect blobs.
keypoints = detector.detect(processed_img)

#put curser on top of blob
win32api.SetCursorPos((int(keypoints[0].pt[0]),(int(keypoints[0].pt[1]))))

# Draw detected blobs as red circles.
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ensures the size of the circle corresponds to the size of blob
processed_img = cv2.drawKeypoints(processed_img, keypoints, np.array([]), (255, 0, 0), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

好的,所以 OpenCV 给我一个大列表或数组?然后我转换为像素坐标的点。我不确定如何在列表或数组中搜索中间的壁橱,即 (840, 525)。

谢谢,它不像 VisualBasic,在 VisualBasic 中我可以遍历每一个以找到最接近的 :(

最佳答案

OpenCV 中keypoint 对象的实际像素位置可以从关键点的.pt 属性中获取。

例如,在检测到图像中的关键点之后,然后打印第一个关键点的坐标如下:

>>> keypoints[0].pt
(100.80000305175781, 100.80000305175781)

你想要做的是捕获离某个指定位置最近的关键点。使用 Python 内置函数有两种非常简单的方法可以做到这一点。 min()sorted() 函数都接受用于创建要比较的数字的 key 参数——您需要每个关键点和您的设定点之间的距离。如果你做了 sorted() 你会得到所有的关键点按最小距离排序,如果你做了 min() 当然你只会得到最小的(并且会更快)。

假设您要检测距离设定点 (10, 20) 最近的关键点(此处使用 (x, y) 排序)。你可以简单地做:

>>> pt = np.array([10, 20])
>>> nearest_kp = min(keypoints, key=lambda kp: np.linalg.norm(kp.pt - pt))
>>> nearest_kp.pt
(100.22400665283203, 100.22400665283203)

注意这里返回的值仍然是关键点,所以它的实际位置还是需要通过.pt属性来抓取。

关于python - 尝试从点列表中找到离屏幕中间最近的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47736640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com