树莓派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()

效果测试图:

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

相关推荐
Mr_Hu4041 分钟前
鸿蒙开发学习笔记-生命周期小记
笔记·学习·harmonyos·鸿蒙
楼田莉子8 分钟前
Linux学习:基础IO相关学习
linux·开发语言·c++·后端·学习
.小小陈.15 分钟前
C++初阶5:string类使用攻略
开发语言·c++·学习·算法
此剑之势丶愈斩愈烈20 分钟前
设计模式学习
学习·设计模式
神奇的代码在哪里22 分钟前
C++的演进与我的编程学习之旅:从底层基础到AI应用
c++·人工智能·python·学习·程序人生·个人开发
摇滚侠24 分钟前
2025最新 SpringCloud 教程,Gateway-过滤器-基本使用,笔记58
笔记·spring cloud·gateway
阿恩.77026 分钟前
2026年2月最新国际会议分享,含计算机/教育/工程技术/电力能源/数学~
人工智能·经验分享·笔记·计算机网络·数学建模·能源
guts35031 分钟前
【anylogic】官方地铁入口教程学习记录(行人库)
学习·anylogic
记忆偶然1 小时前
语音转文本技术实践:主流工具特性解析与应用场景探讨
人工智能·学习·语音识别
Mai Dang1 小时前
黑马Mybatis-Plus学习笔记
笔记·学习·mybatis