• Python机器视觉--OpenCV入门--鼠标事件与TrackBar控件(含小项目:OpenCV调色板)


    1.鼠标事件与TrackBar控件

    1.1控制鼠标

    OpenCV允许我们对窗口上的鼠标动作做出响应.

    • setMouseCallback(winname, callback, userdata) winname是窗口的名字, callback是回调函数, userdata是给回调函数的参数.

    • callback(event, x, y, flags, userdata)回调函数必须包含这5个参数. event是事件(鼠标移动, 左键, 右键等), x,y是点鼠标的坐标点, flags主要用于组合键, userdata就是上面的setMouseCallback的userdata

      鼠标事件:

      • EVENT_MOUSEMOVE 0 鼠标移动
      • EVENT_LBUTTONDOWN 1 按下鼠标左键
      • EVENT_RBUTTONDOWN 2 按下鼠标右键
      • EVENT_MBUTTONDOWN 3 按下鼠标中键
      • EVENT_LBUTTONUP 4 左键释放
      • EVENT_RBUTTONUP 5 右键释放
      • EVENT_MBUTTONUP 6 中键释放
      • EVENT_LBUTTONDBLCLK 7 左键双击
      • EVENT_RBUTTONDBLCLK 8 右键双击
      • EVENT_MBUTTONDBLCLK 9 中键双击
      • EVENT_MOUSEWHEEL 10 鼠标滚轮上下滚动
      • EVENT_MOUSEHWHEEL 11 鼠标左右滚动

      flags:

      • EVENT_FLAG_LBUTTON 1 按下左键
      • EVENT_FLAG_RBUTTON 2 按下右键
      • EVENT_FLAG_MBUTTON 4 按下中键
      • EVENT_FLAG_CRTLKEY 8 按下ctrl键
      • EVENT_FLAG_SHIFTKEY 16 按下shift键
      • EVENT_FLAG_ALTKEY 32 按下alt键
    import cv2
    import numpy as np
    
    
    def mouse_callback(event, x, y, flags, userdata):
        print(event, x, y, flags, userdata)
        
    cv2.namedWindow('mouse', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('mouse', 640, 360)
    
    # 设置鼠标回调函数
    cv2.setMouseCallback('mouse', mouse_callback, '123')
    
    # 显示窗口和背景
    # 生成全黑的图片
    img = np.zeros((360, 640, 3), np.uint8)
    while True:
        cv2.imshow('mouse', img)
        key = cv2.waitKey(1)
        if key & 0xFF == ord('q'):
            break
            
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    1.2 TrackBar控件

    TrackBar控件

    • createTrackbar(trackbarname, winname, value, count, onChange) 创建TrackBar控件, value为trackbar的默认值, count为bar的最大值, 最小为0
    • getTrackbarPos(trackbarname, winname) 获取TrackBar当前值

    2.小项目:使用鼠标事件和TrackBar控件 实现调色板

    ## trackbar
    import cv2
    import numpy as np
    
    # 创建窗口
    cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('trackbar', 640, 480)
    # 定义回调函数
    def callback(value):
        print(value)
    
    # 创建trackbar
    cv2.createTrackbar('R', 'trackbar', 0, 255, callback)
    cv2.createTrackbar('G', 'trackbar', 0, 255, callback)
    cv2.createTrackbar('B', 'trackbar', 0, 255, callback)
    
    # 创建一个背景图片
    img = np.zeros((480,640,3), np.uint8)
    
    while True:
        # 获取当前trackbar的值
        r = cv2.getTrackbarPos('R', 'trackbar')
        g = cv2.getTrackbarPos('G', 'trackbar')
        b = cv2.getTrackbarPos('B', 'trackbar')
        
        # 改变背景图颜色
        img[:] = [b, g, r]
        cv2.imshow('trackbar', img)
        
        key = cv2.waitKey(1)
        if key & 0xFF == ord('q'):
            break
            
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    运行后如图所示
    在这里插入图片描述
    我们尝试调整颜色
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    RGB三原色均可以正确显示,我们尝试任意组合一个颜色
    在这里插入图片描述

  • 相关阅读:
    java计算机毕业设计vue基层社区管理服务网源码+数据库+系统+lw文档
    (三十四)大数据实战——scala运行环境安装配置及IDEA开发工具集成
    RK3399驱动开发 | 18 - 使用 usb3.0 作为device模拟u盘(基于linux5.4.32内核)
    基于ruoyi框架项目-部署到服务器上
    SpringCore完整学习教程3,入门级别
    Python大数据之linux学习总结——day10_hive调优
    一些比较好的行为识别的项目链接
    第4讲:Python常用的几种基本运算符的概念以及使用
    kaggle新赛:谷歌AI模型运行时间预测赛题解析【数据挖掘】
    WeCross应用搭建整理,遇到的一些问题,WeCross如何搭建?
  • 原文地址:https://blog.csdn.net/qq_43944517/article/details/126206697