树莓派4B_OpenCv学习笔记5:读取窗口鼠标状态坐标_TrackBar滑动条控件的使用

news2024/11/27 11:49:55

今日继续学习树莓派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等数值:

# 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)

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()

效果测试图:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1808454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】(基础篇五) —— 排序检索数据

排序检索数据 本章将讲授如何使用SELECT语句的ORDER BY子句,根据需要排序检索出的数据。 排序数据 还是使用上一节中的例子,查询employees表中的last_name字段 SELECT last_name FROM employees;输出结果: 发现其输出并没有特定的顺序。其实&#xf…

速卖通店铺防关联该怎么做?

大家都知道,想要进行多账号操作必须一再小心,否则会有很大的关联风险,而账号关联所带来的后果是卖家绝对不能轻视的,严重的话会导致封号,这样一来自己前期的辛苦运营就全都打水漂了,因此防关联很重要&#…

卷积神经网络 convolution neural network

1.数学卷积:滑动窗口 2.图像具有局部相关性和平移不变性,有许多冗余的特征点,如果用全连接的神经网络会很浪费时间。 3.卷积nn:减少参数,滑动提取特征,特征作为下层卷积的输入,然后放到全连接…

PythonX.X、pipX的关系

PythonX.X、pipX的关系 Python2.x 与 3.x Python 的 3.0 版本,相对于 Python 的早期版本,是一个大的升级。许多针对早期 Python2.x 版本设计的程序都无法在 Python 3.x 上正常执行。为了照顾大量的历史遗留项目,Python 2.6 作为一个过渡版本…

常用的通信协议

最近在做项目,用到了一些通信协议,这里详细整理一下相关的通信协议,方便以后查阅。 常用的通信协议 单工 半双工 全双工单工通信(Simplex Communication)半双工(Half-duplex Communication)全双工(Full-dup…

网络网络层之(6)ICMPv6协议

网络网络层之(6)ICMPv6协议 Author: Once Day Date: 2024年6月2日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CS…

免费!GPT-4o发布,实时语音视频丝滑交互

We’re announcing GPT-4o, our new flagship model that can reason across audio, vision, and text in real time. 5月14日凌晨,OpenAI召开了春季发布会,发布会上公布了新一代旗舰型生成式人工智能大模型【GPT-4o】,并表示该模型对所有免费…

JDBC简介以及快速入门

这些都是JDBC提供的API 简介 每一个数据库的底层细节都不一样 不可能用一套代码操作所有数据库 我们通过JDBC可以操作所有的数据库 JDBC是一套接口 我们自己定义了实现类 定义实现类 然后就能用Java操作自己的数据库了 MySQL对于JDBC的实现类 就是驱动 快速入门 创建新的项…

芒果YOLOv10改进31:特征融合Neck篇:改进特征融合网络 BiFPN 结构,融合更多有效特征

💡只订阅这一个专栏即可阅读:芒果YOLOv10所有改进内容 芒果改进YOLOv10系列:改进特征融合网络 BiFPN 结构,融合更多有效特征 在这篇文章中,将 BiFPN 思想加入到 YOLOv10 结构中 该版本为高效简洁版,涨点多、还速度快(实际效果反馈) 文章目录 一、BiFPN 论文理论二、…

angular2开发知识点

目录 文章目录 一、API 网关地址 配置二、服务注册使用三、模块组件注册使用四、html中style类动态绑定1. 单个类的绑定:[class.special]"isSpecial"2. 多个类的绑定:[ngClass]"{selected:status ,saveable: this.canSave,}"3. 单个…

理解我的积木编程思想

1 学习教程,至少7139手册2 编程实践,遇到实际问题后,在技术资料中查找关键词3 选择适合的条目找到代 码。修正,组合。

C语言详解(文件操作)1

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

手写mybatis-预编译前的sql语句

sql表 mybatis数据库中的gxa_user表 /*Navicat Premium Data TransferSource Server : rootSource Server Type : MySQLSource Server Version : 80028Source Host : localhost:3306Source Schema : mybatisTarget Server Type : MySQLTarget…

论文略读:Onthe Expressivity Role of LayerNorm in Transformers’ Attention

ACL 2023 研究了LayerNorm在 Transformers 中对注意力的作用LayerNorm为Transformer的Attention提供了两个重要的功能: 投影,projection LayerNorm 帮助 Attention 设计一个注意力查询,这样所有的Key都可以平等地访问通过将Key向量投影到同一…

域内攻击 ----> DCSync

其实严格意义上来说DCSync这个技术,并不是一种横向得技术,而是更偏向于权限维持吧! 但是其实也是可以用来横向(配合NTLM Realy),如果不牵强说得话! 那么下面,我们就来看看这个DCSyn…

Vue学习|Vue快速入门、常用指令、生命周期、Ajax、Axios

什么是Vue? Vue 是一套前端框架,免除原生JavaScript中的DOM操作,简化书写 基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。官网:https://v2.cn.vuejs.org/ Vue快速入门 打开页面&#xff0…

rce漏洞试试看 buuctf的pingpingping 试试ctf的rce怎么样

打开靶机开始操作 然后我们先知道一些知识点:下面这些是常用的 |这个管道符也就是上一条的命令的输出结果作为下一条命令的输入;这个是跟sql的堆叠注入是一样的|| || 当前面的执行出错时(为假)执行后面的 & 将任务置于后台执…

R语言绘图 --- 桑基图(Biorplot 开发日志 --- 5)

「写在前面」 在科研数据分析中我们会重复地绘制一些图形,如果代码管理不当经常就会忘记之前绘图的代码。于是我计划开发一个 R 包(Biorplot),用来管理自己 R 语言绘图的代码。本系列文章用于记录 Biorplot 包开发日志。 相关链接…

从Log4j和Fastjson RCE漏洞认识jndi注入

文章目录 前言JNDI注入基础介绍靶场搭建漏洞验证注入工具 log4j RCE漏洞分析漏洞靶场检测工具补丁绕过 Fastjson RCE漏洞分析漏洞靶场检测工具补丁绕过 总结 前言 接着前文的学习《Java反序列化漏洞与URLDNS利用链分析》,想了解为什么 Fastjson 反序列化漏洞的利用…

如何制定工程战略

本文介绍了领导者如何有效制定工程战略,包括理解战略核心、如何收集信息并制定可行的策略,以及如何利用行业最佳实践和技术债务管理来提升团队效能和产品质量。原文: How to Build Engineering Strategy 如果你了解过目标框架(如 OKR&#xf…