• opencv_python学习笔记五


    7把鼠标当画笔

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2016/11/14 9:42
    # @Author  : Retacn
    # @Site    : 处理鼠标事件
    # @File    : mouseDraw.py
    # @Software: PyCharm

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

    ['EVENT_FLAG_ALTKEY', 'EVENT_FLAG_CTRLKEY', 'EVENT_FLAG_LBUTTON', 'EVENT_FLAG_MBUTTON', 'EVENT_FLAG_RBUTTON', 'EVENT_FLAG_SHIFTKEY', 'EVENT_LBUTTONDBLCLK', 'EVENT_LBUTTONDOWN', 'EVENT_LBUTTONUP', 'EVENT_MBUTTONDBLCLK', 'EVENT_MBUTTONDOWN', 'EVENT_MBUTTONUP', 'EVENT_MOUSEHWHEEL', 'EVENT_MOUSEMOVE', 'EVENT_MOUSEWHEEL', 'EVENT_RBUTTONDBLCLK', 'EVENT_RBUTTONDOWN', 'EVENT_RBUTTONUP']

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2016/11/14 9:42
    # @Author  : Retacn
    # @Site    : 处理鼠标事件,双击画圆
    # @File    : mouseDraw.py
    # @Software: PyCharm

    import cv2
    import numpy as np

    #events=[i for i in dir(cv2) if 'EVENT' in i]
    #print(events)

    #鼠标事件回调函数
    def draw_circle(event,x,y,flags,param):
        if event==cv2.EVENT_LBUTTONDBLCLK:
            cv2.circle(img,(x,y),100,(255,0,0),-1)

    #创建图像与窗口
    #将窗口和回调函数邦定
    img=np.zeros((512,512,3),np.uint8)
    cv2.namedWindow("Mouse_draw")
    cv2.setMouseCallback("Mouse_draw",draw_circle)

    while(1):
        cv2.imshow("Mouse_draw",img)
        if cv2.waitKey(20)&0xFF==27:
            break;
    cv2.destroyAllWindows()

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2016/11/14 9:55
    # @Author  : Retacn
    # @Site    : 根据选择在拖动时画矩形或是画圆
    # @File    : mouseDraw2.py
    # @Software: PyCharm
    import cv2
    import numpy as np

    # 当鼠标按下的为true
    drawing = False
    # 如果modetrue绘制矩形,按下m 绘制曲线
    mode = True
    lx, ly = -1, -1


    # 回调函数
    def draw_circle(event, x, y, flags, param):
        global lx, ly, drawing, mode
        # 当按下左健时返回起始位置坐标
        
    if event == cv2.EVENT_LBUTTONDOWN:
            drawing = True
            
    lx, ly = x, y
        # 当左健按下并移动是绘制图形,event(移动),flag(是否按下)
        
    elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:
            if drawing == True:
                if mode == True:
                    cv2.rectangle(img, (lx, ly), (x, y), (0, 255, 0), -1)
                else:
                    # 绘制圆
                    
    cv2.circle(img, (x, y), 3, (0, 0, 255), -1)
        # 当鼠标放开停止
        
    elif event == cv2.EVENT_LBUTTONUP:
            drawing = False


    img = np.zeros((512, 512, 3), np.uint8)
    cv2.namedWindow("Mouse_draw2")
    cv2.setMouseCallback('Mouse_draw2', draw_circle)
    while (1):
        cv2.imshow('Mouse_draw2', img)
        k = cv2.waitKey(1) & 0xFF
        if k == ord('m'):
            mode = not mode
        elif k == 27:
            break

  • 相关阅读:
    Windows Driver Mode 1
    一个程序员的奋斗经历 2
    JavaScript判断文件是否存在
    流程图个图标详解
    wget for windows
    软件的开发周期
    Firefox支持activex的插件
    第二次作业
    C/C++字符串使用整理
    c#学习小记录(1)
  • 原文地址:https://www.cnblogs.com/retacn-yue/p/6194171.html
Copyright © 2020-2023  润新知