【发布时间】:2021-01-13 03:03:11
【问题描述】:
我知道如何捕获整个屏幕的鼠标移动,但我想在 python 的特定窗口中捕获鼠标移动。我需要在该特定窗口中跟踪鼠标的位置。
【问题讨论】:
标签: python opencv window mouse pyautogui
我知道如何捕获整个屏幕的鼠标移动,但我想在 python 的特定窗口中捕获鼠标移动。我需要在该特定窗口中跟踪鼠标的位置。
【问题讨论】:
标签: python opencv window mouse pyautogui
cv2.namedWindow(winname='my_drawing', flags=cv2.WINDOW_NORMAL)
可选:如果需要,您可以调整窗口大小:
cv2.resizeWindow(winname='my_drawing', width=600, height=600)
callback函数来返回鼠标坐标。假设我想在屏幕上绘制矩形。cv2.setMouseCallback('my_drawing', draw_rectangle)
我的draw_rectangle 将是:
def draw_rectangle(event, x, y, flags, param):
global x_mouse, y_mouse
if event == cv2.EVENT_LBUTTONDOWN:
cv2.rectangle(img, pt1=(x, y),
pt2=(x+10, y+10),
color=(180, 105, 255),
thickness=4)
cv2.imshow('my_drawing', img)
cv2.waitKey(0)
x_mouse, y_mouse = x, y
我们有两个global 变量,我们将在函数外部声明为
x_mouse, y_mouse = (None, None)
my_drawing 命名窗口大小相同的 RGB 图像。img = np.zeros((600, 600, 3), np.uint8)
以下部分是可选的,我想在按s关键字时显示坐标。
while True:
cv2.imshow('my_drawing', img)
k = cv2.waitKey(0) & 0xFF
if k == 27:
break
elif k == ord('s'):
print("x, y = ({}, {})".format(x_mouse, y_mouse))
所以当我在屏幕上单击一次并在s 上单击两次时,关键字结果将是:
x, y = (503, 420)
x, y = (363, 362)
x, y = (499, 274)
x, y = (289, 291)
x, y = (304, 439)
代码:
import cv2
import numpy as np
x_mouse, y_mouse = (None, None)
def draw_rectangle(event, x, y, flags, param):
global x_mouse, y_mouse
if event == cv2.EVENT_LBUTTONDOWN:
cv2.rectangle(img, pt1=(x, y),
pt2=(x+10, y+10),
color=(180, 105, 255),
thickness=4)
cv2.imshow('my_drawing', img)
cv2.waitKey(0)
x_mouse, y_mouse = x, y
cv2.namedWindow(winname='my_drawing', flags=cv2.WINDOW_NORMAL)
cv2.resizeWindow(winname='my_drawing', width=600, height=600)
cv2.setMouseCallback('my_drawing', draw_rectangle)
img = np.zeros((600, 600, 3), np.uint8)
while True:
cv2.imshow('my_drawing', img)
k = cv2.waitKey(10) & 0xFF
if k == 27:
break
elif k == ord('s'):
print("x, y = ({}, {})".format(x_mouse, y_mouse))
cv2.destroyAllWindows()
【讨论】: