树莓派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等数值:

python 复制代码
# coding=utf-8
import cv2
import numpy as np

#鼠标回调函数
def Mouse_Callback(event, x, y, flags, param):
    #左右键输出提示与键值,其余按键事件就不例举了,直接打印定义的键值了
    if event == cv2.EVENT_LBUTTONDOWN:
        print("L_Button Down {}\r\n".format(event))
    elif event == cv2.EVENT_RBUTTONDOWN:
        print("R_Button Down {}\r\n".format(event))
    else:
        print(event)
    #输出鼠标坐标\Flags\userdata
    print("Mouse position :  X :"+str(x)+" Y :"+str(y)+"\r\n")
    print("Flags : {}".format(flags))
    print(f"Userdata is{param}\r\n\r\n")	

#创建窗口
cv2.namedWindow("mouse",cv2.WINDOW_NORMAL)
cv2.resizeWindow("mouse",1280,640)

#设置鼠标回调
cv2.setMouseCallback("mouse",Mouse_Callback)
#显示窗口与背景
img=np.zeros((640,1280,3),np.uint8)

while True:
    cv2.imshow("mouse",img)
    key=cv2.waitKey(1)
    if key&0XFF==ord('q'):
        break

#释放所有资源
cv2.destroyAllwindows()

效果测试图:

TrackBar滑动条控件:

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

1、createTrackbar:

  1. 需要传入五个参数:

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

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

2、getTrackBarPos:

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

  2. 输出:滑动条当前值

3)

3、Trackbar callback回调函数:

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

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

python 复制代码
def callback_function(value, userdata=None):  

    # 在这里处理滑动条的变化  

    pass

程序编写:

以下程序编写实现了:

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

python 复制代码
# coding=utf-8
import cv2
import numpy as np

#定义空回调函数
def callback(value,userdata=None):
    pass

#创建窗口
cv2.namedWindow("TrackBar",cv2.WINDOW_NORMAL)
cv2.resizeWindow("TrackBar",640,640)


#创建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((640,640,3),np.uint8)

while True:
    cv2.imshow("TrackBar",img)
    #获取TrackBar的值
    r=cv2.getTrackbarPos("R","TrackBar")
    g=cv2.getTrackbarPos("G","TrackBar")
    b=cv2.getTrackbarPos("B","TrackBar")
    #使用b,g,r值设置img所有像素
    img[:]=[b,g,r]
    
    key=cv2.waitKey(1)
    if key&0XFF==ord('q'):
        break
#释放所有资源
cv2.destroyAllwindows()

效果测试图:

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

相关推荐
夜流冰1 分钟前
工程师 - Onion Architecture in Software Development
笔记
番薯大佬1 小时前
Python学习-day9 字典Dictionary
网络·python·学习
一位搞嵌入式的 genius1 小时前
前端开发核心技术与工具全解析:从构建工具到实时通信
前端·笔记
..过云雨1 小时前
04.【Linux系统编程】基础开发工具2(makefile、进度条程序实现、版本控制器Git、调试器gdb/cgdb的使用)
linux·笔记·学习
理想国的女研究僧2 小时前
Jupyter Notebook操作指南(1)
ide·python·学习·jupyter
月屯2 小时前
docke笔记下篇
笔记
GilgameshJSS2 小时前
【学习K230-例程19】GT6700-TCP-Client
网络·python·网络协议·学习·tcp/ip
悠悠~飘3 小时前
php学习(第五天)
学习·php
能不能别报错3 小时前
K8s学习笔记(二):Pod
笔记·学习·kubernetes
呱呱巨基4 小时前
C/C++ 内存管理
c++·笔记·学习