gpt4 book ai didi

python - 如何在Python中的给定窗口中捕获鼠标移动?

转载 作者:行者123 更新时间:2023-12-02 17:58:46 25 4
gpt4 key购买 nike

我知道如何捕获整个屏幕的鼠标移动,但是我想捕获python中特定窗口中的鼠标移动。我需要在该特定窗口中跟踪鼠标的位置。

最佳答案


  • 您需要创建一个窗口。

  • 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)



  • 因为我打算在图像上绘制一个矩形。我应该声明与名为window的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关键字上单击2次时,结果将是:
    enter image description here
    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()

    关于python - 如何在Python中的给定窗口中捕获鼠标移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64086781/

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