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

效果测试图:

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

相关推荐
码荼2 小时前
学习开发之hashmap
java·python·学习·哈希算法·个人开发·小白学开发·不花钱不花时间crud
武昌库里写JAVA3 小时前
Oracle如何使用序列 Oracle序列使用教程
java·开发语言·spring boot·学习·课程设计
ysa0510303 小时前
数论基础知识和模板
数据结构·c++·笔记·算法
祁思妙想3 小时前
八股学习(三)---MySQL
数据库·学习·mysql
今天背单词了吗9804 小时前
算法学习笔记:7.Dijkstra 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·数据结构·笔记·算法
mitt_4 小时前
《人生顶层设计》读书笔记7
笔记
智者知已应修善业4 小时前
【51单片机节日彩灯控制器设计】2022-6-11
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
amazinging4 小时前
北京-4年功能测试2年空窗-报培训班学测开-第四十一天
python·学习·appium
Jyywww1214 小时前
微信小程序学习笔记
笔记·学习·微信小程序
amazinging4 小时前
北京-4年功能测试2年空窗-报培训班学测开-第三十九天
python·学习·appium