我想做一个游戏机器人,在地板上寻找某个项目,然后点击它。我成功地把第一部分弄对了(它甚至在它周围画了一个矩形),但令人尴尬的是我不能正确地得到物体的坐标。我使用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是什么以及如何得到坐标吗?在
下面是我目前所取得成就的屏幕截图:
首先。你不需要这么复杂的计算
就积分而言,我看不出任何问题。这不是坐标问题。我想很有可能是pyautoui函数的问题。但我无法验证,因为我似乎无法在我的电脑上安装它
基于实例
^{pr2}$尝试先调用相同的参数,以排除最后一个参数问题。如果可以,那么它的简单格式是。在
如果不能,则可能是图像转换问题。pyautogui函数使用的是Pillow,它提供的格式必须适应opencv。所以这要么是数据类型RGB、BGR还是图像坐标问题(例如opencv指的是图像坐标,而pyautogui使用的是桌面坐标?)。在
据我所知,OpenCV和pyautogui都使用与示例^{{cd1>}分辨率所示的相同坐标系。
OpenCV的^{cd2>}函数以矩形的左上坐标和右下坐标作为参数。由于您能够在图像中绘制边界框,因此您拥有要检查的ROI的正确坐标。从docs函数中,^{cd3>}函数包含两个参数:^{{cd4>}和^{cd5>}。假设要将鼠标移动到边界框的中心,则可以
^{pr2}$相关问题 更多 >
编程相关推荐