获取临时工找到的物体的坐标

2024-09-30 12:19:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个游戏机器人,在地板上寻找某个项目,然后点击它。我成功地把第一部分弄对了(它甚至在它周围画了一个矩形),但令人尴尬的是我不能正确地得到物体的坐标。我使用cv2.matchTemplate方法。这是我的代码:

import numpy as np
import pyautogui

img_bgr =  cv2.imread('gra.png')
img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)

template = cv2.imread('bones2.png', 0)

w, h = template.shape[:: -1]

res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
threshhold = 0.90
loc = np.where( res >= threshhold)
for pt in zip(*loc[:: -1]):
    cv2.rectangle(img_bgr, pt, (pt[0] + w, pt[1] + h),(0, 255, 255), 2 )
    #here i wanted to move the mouse to the coordinates of a found item, however
    #i cant get these two right ↓        ↓
    pyautogui.moveTo(           ?     ,  ? ,duration=0.5)

cv2.imshow('znalezione', img_bgr)

cv2.waitKey()
cv2.destroyAllWindows()

我试过了:

^{pr2}$

但这根本行不通。有人能给我解释一下pt是什么以及如何得到坐标吗?在

下面是我目前所取得成就的屏幕截图:

enter image description here


Tags: importptimgpngnprestemplatecv2
2条回答

首先。你不需要这么复杂的计算

x=pt[0]
y=pt[1]
center_x = x + 0.5 * w
center_y = y + 0.5 * h

就积分而言,我看不出任何问题。这不是坐标问题。我想很有可能是pyautoui函数的问题。但我无法验证,因为我似乎无法在我的电脑上安装它

基于实例

^{pr2}$

尝试先调用相同的参数,以排除最后一个参数问题。如果可以,那么它的简单格式是。在

如果不能,则可能是图像转换问题。pyautogui函数使用的是Pillow,它提供的格式必须适应opencv。所以这要么是数据类型RGB、BGR还是图像坐标问题(例如opencv指的是图像坐标,而pyautogui使用的是桌面坐标?)。在

据我所知,OpenCV和pyautogui都使用与示例^{{cd1>}分辨率所示的相同坐标系。

0,0       X increases  >
+             -+
|                           | Y increases
|                           |     |
|   1920 x 1080 screen      |     |
|                           |     V
|                           |
|                           |
+             -+ 1919, 1079

OpenCV的^{cd2>}函数以矩形的左上坐标和右下坐标作为参数。由于您能够在图像中绘制边界框,因此您拥有要检查的ROI的正确坐标。从docs函数中,^{cd3>}函数包含两个参数:^{{cd4>}和^{cd5>}。假设要将鼠标移动到边界框的中心,则可以

^{pr2}$

相关问题 更多 >

    热门问题