Python-OpenCV-usa el mouse como un bolígrafo

Tabla de contenido

Crear una función de devolución de llamada del mouse

Ejemplo: dibuje un círculo en la posición del doble clic


Crear una función de devolución de llamada del mouse

Esta función se ejecuta cuando ocurre un evento de mouse. Existe un formato específico para crear una función de devolución de llamada del mouse, que es el mismo en todas partes. Se diferencia solo en función.

Ver todos los eventos del mouse

import cv2 as cv
events = [i for i in dir(cv) if 'EVENT' in i]
print(events)

Todos los eventos son los siguientes 


    CV_EVENT_MOUSEMOVE      =0,   //鼠标移动
    CV_EVENT_LBUTTONDOWN    =1,   //按下左键
    CV_EVENT_RBUTTONDOWN    =2,   //按下右键
    CV_EVENT_MBUTTONDOWN    =3,   //按下中键
    CV_EVENT_LBUTTONUP      =4,   //放开左键
    CV_EVENT_RBUTTONUP      =5,   //放开右键
    CV_EVENT_MBUTTONUP      =6,   //放开中键
    CV_EVENT_LBUTTONDBLCLK  =7,   //左键双击
    CV_EVENT_RBUTTONDBLCLK  =8,   //右键双击
    CV_EVENT_MBUTTONDBLCLK  =9,   //中键双击
    CV_EVENT_MOUSEWHEEL     =10,  //滚轮滚动
    CV_EVENT_MOUSEHWHEEL    =11   //横向滚轮滚动(还好我鼠标是G502可以这么干)

    CV_EVENT_FLAG_LBUTTON   =1,   //左键拖拽
    CV_EVENT_FLAG_RBUTTON   =2,   //右键拖拽
    CV_EVENT_FLAG_MBUTTON   =4,   //中键拖拽
    CV_EVENT_FLAG_CTRLKEY   =8,   //按住CTRL拖拽
    CV_EVENT_FLAG_SHIFTKEY  =16,  //按住Shift拖拽
    CV_EVENT_FLAG_ALTKEY    =32   //按住ALT拖拽

Aprenda el uso de cv.setMouseCallback ( windowName, onMouse, param = None )

Esta función siempre se ejecuta en el programa, cada vez que se mueve el mouse , esta función se llama

Ejemplo: dibuje un círculo en la posición del doble clic

import cv2 as cv
import numpy as np
def draw_circle(event,x,y,flags,param):   ##定义回调函数
    if event == cv.EVENT_LBUTTONDBLCLK: ##左键双击
        cv.circle(img,(x,y),100,(255,0,0),-1)

if __name__ == '__main__':
    img = np.zeros((512,512,3),np.uint8)  ##创建一个黑色图像
    cv.namedWindow("image")    # 创建图像与窗口并将窗口与回调函数绑定
    cv.setMouseCallback("image",draw_circle)
    while(1):
        cv.imshow("image",img)
        if cv.waitKey(20) & 0xFF==27:  ##27是Esc的ASCII码
            break
    cv.destroyAllWindows()

 

 

Supongo que te gusta

Origin blog.csdn.net/zangba9624/article/details/105983212
Recomendado
Clasificación