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

效果测试图:

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

相关推荐
我自飞扬临天下30 分钟前
Elasticsearch操作笔记版
java·笔记·elasticsearch
Jackilina_Stone1 小时前
【HUAWEI】HCIP-AI-MindSpore Developer V1.0 | 第一章 神经网络基础( 2 卷积神经网络 ) | 学习笔记
人工智能·笔记·深度学习·神经网络·cnn
加酶洗衣粉1 小时前
PostgreSQL学习笔记(一):PostgreSQL介绍和安装
笔记·学习·postgresql
大佬,救命!!!2 小时前
重新整理机器学习和神经网络框架
人工智能·笔记·深度学习·神经网络·机器学习·类比学习
人工智能技术咨询.2 小时前
工信部电子标准院计算机视觉证书报考指南!
人工智能·深度学习·学习·计算机视觉·语言模型
ThreeYear_s2 小时前
OFDM学习-(二)长短序列和PPDU整体数据处理流程
学习
JavaPub-rodert2 小时前
项目48:简易语言学习助手【源代码】 --- 《跟着小王学Python·新手》
服务器·开发语言·python·学习·microsoft
Rinai_R2 小时前
关于大一上的总结
经验分享·学习
嵌入式小杨3 小时前
阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)
单片机·嵌入式硬件·物联网·学习·面试·硬件工程
霜雪殇璃3 小时前
2025.01.02(数据库)
笔记·学习