今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi)
本人所用树莓派4B 装载的系统与版本如下:
版本可用命令 (lsb_release -a) 查询:
Opencv 版本是4.5.1:
今日学习:读取窗口鼠标状态坐标_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_MBUTTONDOWN
的event
值不同)。cv2.EVENT_FLAG_CTRLKEY
: Ctrl键被按下,整数值为8。cv2.EVENT_FLAG_SHIFTKEY
: Shift键被按下,整数值为16。cv2.EVENT_FLAG_ALTKEY
: Alt键被按下,整数值为32。
以下程序实现了
创建一个1280*640的窗口
鼠标移动、点击、抬起等按键时打印键值、坐标、Flag、usedata等数值:
# 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控件需要认识俩个函数:
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 (用户数据\可以为空)
def callback_function(value, userdata=None): # 在这里处理滑动条的变化 pass
以下程序编写实现了:
创建一个窗口,可以通过R\G\B三个TrackBar控件实现调整窗口颜色:
# 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()
就是生成了一个带三个滑块的窗口,可以通过滑动调整颜色: