【问题标题】:locate an opencv detection using pyautogui使用 pyautogui 定位 opencv 检测
【发布时间】:2019-01-20 04:29:08
【问题描述】:

所以我正在制作一个机器人来检测屏幕上的图标并将鼠标移动到用户选择的检测到的图标上。这就是代码的样子:

import numpy as np
import pyautogui
import cv2
from PIL import ImageGrab

fourcc = cv2.VideoWriter_fourcc(*'XVID')

face_csc = cv2.CascadeClassifier('improved_cascade.xml')

out = cv2.VideoWriter("output.avi", fourcc, 5.0, (1366, 768))

while True:

    img = ImageGrab.grab(bbox=None)
    # convert image to numpy array
    img_np = np.array(img)
    # convert color space from BGR to RGB
    frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB)
    # show image on OpenCV frame
    faces = face_csc.detectMultiScale(frame, 1.1 , 15)

    for (x,y,w,h) in faces:
        detected_icon = cv2.rectangle(frame,(x,y),(x+w,y+h), (255,0,0), 2)
        roi_gray = frame[y:y+h, x:x+w]
        roi_color = img_np[y:y+h,x:x+w]
        cv2.putText(frame,'icon',(x,y),cv2.FONT_HERSHEY_TRIPLEX,0.8,(0,0,255),1)
        cv2.imshow("stream", frame)
    # write frame to video writer
    out.write(frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

out.release() 
cv2.destroyAllWindows()

但我无法用鼠标点击检测到的图标 opencv。例如:假设我设置了我的程序,以便当它检测到屏幕上的 chrome 时,它​​会自动将鼠标悬停在图标上并单击它。我怎么能做到这一点?谢谢

【问题讨论】:

    标签: python opencv computer-vision artificial-intelligence pyautogui


    【解决方案1】:

    我没有方便的 Windows 框来运行 ImageGrab,但假设它生成的屏幕截图与实际屏幕具有相同的宽度和高度(以像素为单位),因为 Pyautogui 和 OpenCV 都将原点放在顶部左,Pyautogui 的翻译应该很简单:

    for (x,y,w,h) in faces:
        center_x = x + 0.5 * w
        center_y = y + 0.5 * h
        pyautogui.click(center_x, center_y)
    

    这会将鼠标指针传送到对象矩形的中心并单击它。如果您想模拟更像人类的鼠标移动和点击,Pyautogui 有 a number of tools 用于此目的。

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 2021-02-19
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 2013-08-17
      相关资源
      最近更新 更多