• 树莓派4B_OpenCv学习笔记5:读取窗口鼠标状态坐标_TrackBar滑动条控件的使用


    今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi)

     本人所用树莓派4B 装载的系统与版本如下:

     版本可用命令 (lsb_release -a) 查询:

     Opencv 版本是4.5.1:

    今日学习:读取窗口鼠标状态坐标_TrackBar滑动条控件的使用

    目录

    读取鼠标状态坐标:

    鼠标回调函数中参数的值:

    event参数:

    flags参数:

    程序编写:

    效果测试图:

    TrackBar滑动条控件:

    程序编写:

    效果测试图:


    读取鼠标状态坐标:

    这整个读取鼠标状态坐标过程分俩部分:

    1、编写鼠标回调函数:

            1)名称可以自己定义

            2)有五个参数会被传入:(这五个参数供你判断用,函数自动检测参数值)

                    event(鼠标事件)、X、Y(坐标)、

                    flag(组合键值)、userdata(用户数据/可以不定义)

            3) 产生鼠标状态改变事件时进入的一个回调函数

    2、设置鼠标回调函数:

            1)有三个参数需要传入:

                    Winname:(窗口名称)、callback(回调函数名称)、userdata(用户数据)

            2)

                    

    鼠标回调函数中参数的值:

    event参数:

    • cv2.EVENT_LBUTTONDOWN: 鼠标左键按下,整数值为1
    • cv2.EVENT_RBUTTONDOWN: 鼠标右键按下,整数值为2
    • cv2.EVENT_MBUTTONDOWN: 鼠标中键(如果有的话)按下,整数值为3
    • cv2.EVENT_LBUTTONUP: 鼠标左键释放,整数值为4
    • cv2.EVENT_RBUTTONUP: 鼠标右键释放,整数值为5
    • cv2.EVENT_MBUTTONUP: 鼠标中键(如果有的话)释放,整数值为6
    • cv2.EVENT_MOUSEMOVE: 鼠标移动,整数值为0

    flags参数:

    • cv2.EVENT_FLAG_LBUTTON: 鼠标左键被按下,整数值为1(通常与event参数一起使用,不直接作为flags的值)。
    • cv2.EVENT_FLAG_RBUTTON: 鼠标右键被按下,整数值为2(同样通常与event参数一起使用)。
    • cv2.EVENT_FLAG_MBUTTON: 鼠标中键被按下,整数值为4(注意这与EVENT_MBUTTONDOWNevent值不同)。
    • cv2.EVENT_FLAG_CTRLKEY: Ctrl键被按下,整数值为8
    • cv2.EVENT_FLAG_SHIFTKEY: Shift键被按下,整数值为16
    • cv2.EVENT_FLAG_ALTKEY: Alt键被按下,整数值为32

       

     

    程序编写:

    以下程序实现了

    创建一个1280*640的窗口

    鼠标移动、点击、抬起等按键时打印键值、坐标、Flag、usedata等数值:

    1. # coding=utf-8
    2. import cv2
    3. import numpy as np
    4. #鼠标回调函数
    5. def Mouse_Callback(event, x, y, flags, param):
    6. #左右键输出提示与键值,其余按键事件就不例举了,直接打印定义的键值了
    7. if event == cv2.EVENT_LBUTTONDOWN:
    8. print("L_Button Down {}\r\n".format(event))
    9. elif event == cv2.EVENT_RBUTTONDOWN:
    10. print("R_Button Down {}\r\n".format(event))
    11. else:
    12. print(event)
    13. #输出鼠标坐标\Flags\userdata
    14. print("Mouse position : X :"+str(x)+" Y :"+str(y)+"\r\n")
    15. print("Flags : {}".format(flags))
    16. print(f"Userdata is{param}\r\n\r\n")
    17. #创建窗口
    18. cv2.namedWindow("mouse",cv2.WINDOW_NORMAL)
    19. cv2.resizeWindow("mouse",1280,640)
    20. #设置鼠标回调
    21. cv2.setMouseCallback("mouse",Mouse_Callback)
    22. #显示窗口与背景
    23. img=np.zeros((640,1280,3),np.uint8)
    24. while True:
    25. cv2.imshow("mouse",img)
    26. key=cv2.waitKey(1)
    27. if key&0XFF==ord('q'):
    28. break
    29. #释放所有资源
    30. cv2.destroyAllwindows()

    效果测试图:

    TrackBar滑动条控件:

    使用TrackBar控件需要认识俩个函数:

    1、createTrackbar:

            1) 需要传入五个参数:

                    trackBarname(trackBar名称)、winname(窗口名称)、value(trackBar当前值)

                    count(trackBar最大值)、callback(回调函数名称)、userdata(可以为空)

            2)

    2、getTrackBarPos:

            1) 输入参数:Trackbarname(TrackBar名称)、Winname(窗口名称)

            2) 输出:滑动条当前值

            3)

    3、Trackbar callback回调函数:

            1)传入俩参数: (这俩个参数供你判断用,函数自动检测参数值)

                    value(当前值)、userdata (用户数据\可以为空)

    1. def callback_function(value, userdata=None):
    2. # 在这里处理滑动条的变化
    3. pass

    程序编写:

    以下程序编写实现了:

    创建一个窗口,可以通过R\G\B三个TrackBar控件实现调整窗口颜色:

    1. # coding=utf-8
    2. import cv2
    3. import numpy as np
    4. #定义空回调函数
    5. def callback(value,userdata=None):
    6. pass
    7. #创建窗口
    8. cv2.namedWindow("TrackBar",cv2.WINDOW_NORMAL)
    9. cv2.resizeWindow("TrackBar",640,640)
    10. #创建Trackbar
    11. cv2.createTrackbar("R","TrackBar",0,255,callback)
    12. cv2.createTrackbar("G","TrackBar",0,255,callback)
    13. cv2.createTrackbar("B","TrackBar",0,255,callback)
    14. img=np.zeros((640,640,3),np.uint8)
    15. while True:
    16. cv2.imshow("TrackBar",img)
    17. #获取TrackBar的值
    18. r=cv2.getTrackbarPos("R","TrackBar")
    19. g=cv2.getTrackbarPos("G","TrackBar")
    20. b=cv2.getTrackbarPos("B","TrackBar")
    21. #使用b,g,r值设置img所有像素
    22. img[:]=[b,g,r]
    23. key=cv2.waitKey(1)
    24. if key&0XFF==ord('q'):
    25. break
    26. #释放所有资源
    27. cv2.destroyAllwindows()

    效果测试图:

    就是生成了一个带三个滑块的窗口,可以通过滑动调整颜色:

  • 相关阅读:
    航天智信:严控航天系统研发安全,助力建设“航天强国”
    leetcode day12 对称二叉树
    uniapp(uncloud) 使用生态开发接口详情5(云公共模块)
    spark stream入门案例:netcat准实时处理wordCount(scala 编程)
    屡获大奖的界面控件开发包DevExpress v22.1官宣发布
    【C/PTA】循环结构进阶练习(二)
    升级Spring Cloud最新版后,有个重要的组件被弃用了。。。
    Modern C++
    JDBC向数据库中插入BLOB类型数据
    spring的简单使用(配合Druid操作数据库)
  • 原文地址:https://blog.csdn.net/qq_64257614/article/details/139545003