计算机视觉OpenCv学习系列:第三部分、滚动条操作

news2024/11/22 22:42:02

第三部分、滚动条操作

    • 第一节、滚动条操作
      • 1.事件响应函数
        • (1)UI组件时间响应过程
        • (2)事件响应函数
        • (3)创建窗口函数
        • (4)调整图像亮度
      • 2.滚动条操作
      • 3.代码练习与测试
    • 学习参考

第一节、滚动条操作

1.事件响应函数


(1)UI组件时间响应过程

  • Callback基本流程

    • OpenCV中的响应主要是通过操作系统实现。

    • 如右图所示假设我们自己创建了一个Api,做滚动条,名字是createTrackbar,滚动条里面参数包括。

      • 注意:参数的定义必须按照右图中的形式定义
      • trackbarname滚动条名称
      • winname窗口名称 – imshow的第一个参数
      • value 滚动条上拉动滑块的值
      • count 滑块的最大值(0-255或者0-100等等)
      • onChange 滑动过程中触发的函数
      • userdata 滑动过程中外带的参数,没有的话就置0

在这里插入图片描述

注意:右图中的TrackbarCallback指的就是左图中的回调的响应方法,当我们用户组件触发之后,应用程序会去让用户界面回调一个方法,这个方法就是TrackbarCallback,这个回调的方法是要自己定义的。

(2)事件响应函数

typedef void(* cv::TrackbarCallback) (int pos, void *userdata) 
# pos必须定义,指的是滑块的位置,userdata用户数据可以定义也可以不定义
# 完成事件响应函数的声明与实现
def trackbar_callback (pos):
    print(pos)

(3)创建窗口函数

cv.namedWindow(winname [, flags]) -> None
# 参数: winname表示窗口标题
# 参数flags支持的flag有:
1. WINDOW_NORMAL  # 可以调整窗口大小,(推荐如果图片太大就用这个)
2. WINDOW_AUTOSIZE  # 根据图像大小自动适应,不可调,(推荐如果自己电脑分辨率能显示出来就用这个)
3. WINDOW_KEEPRATIO  # 可以保持比例窗口,调整大小,(推荐不用这个,用上面两个)

(4)调整图像亮度

RGB值表示亮度
RGB(0, 0,0) 黑色 --> RGB(255,255,255)白色 # 通过增大像素值提高亮度
# add、subtract函数除了支持图像+图像、也可以图像+常量方式(常量就是一个颜色)
# 通过他们可以修改图像的亮度

一些常见的调整图像亮度的方法:

  • 动态调整,基于滚动条修改常量值,实现动态修改图像亮度并刷新显示
  • 创建图像窗口
  • 创建滚动条组件
  • 在窗口显示图像
  • 拖拉滚动条修改图像亮度

2.滚动条操作


通过滚动条的方式改变图像亮度:

在这里插入图片描述

3.代码练习与测试


# 创建一个滚动条调整亮度
def trackbar_callback(pos):  # trackbar_callback函数里可以什么都不做,但是必须有这个函数
    print(pos)


def trackbar_demo():
    image = cv.imread(r"F:\python\opencv-4.x\samples\data\butterfly.jpg")
    cv.namedWindow("trackbar_demo",cv.WINDOW_AUTOSIZE)
    cv.createTrackbar("lightness", "trackbar_demo", 0, 200, trackbar_callback)# callback先注册后使用
    cv.imshow("trackbar_demo", image)
    while True:
        pos = cv.getTrackbarPos("lightness", "trackbar_demo")
        image2 = np.zeros_like(image)
        # image2是个常量,通过原图片和image2做加减法来提升和降低亮度
        image2[:, :] = (np.uint8(pos), np.uint8(pos), np.uint8(pos))
        # 提升亮度
        result = cv.add(image, image2)
        # 降低亮度
        # result = cv.subtract(image, image2)
        cv.imshow("trackbar_demo", result)
        # 1ms获取一次键值,默认是 - 1,ESC是27
        c = cv.waitKey(1)
        if c == 27:  # 按ESC建终止调整亮度功能
            break
    cv.waitKey(0)  # 按任意建关闭窗口
    cv.destroyAllWindows()

结果示例:

在这里插入图片描述

学习参考

本系列所有OpenCv相关的代码示例和内容均来自博主学习的网站:opencv_course

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

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

相关文章

Python 协程学习有点难度?这篇文字值得你去收藏

Python 协程在基础学习阶段,属于有难度的知识点,建议大家在学习的时候,一定要反复练习。 Python 中的协程是一种用户态的轻量级线程。它与普通的线程不同,普通线程是由操作系统调度的,而协程是由程序自己调度的。因此&…

【ESP 保姆级教程】玩转emqx篇③ ——认证安全之使用内置数据库(Mnesia)的密码认证

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-01-15 ❤️❤️ 本篇更新记录 2022-01-15 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝&#x1f64…

Transformer模型详解相关了解

文章目录Transformer模型详解1.前言1.1 Transformer 整体结构1.2 Transformer 的工作流程2. Transformer 的输入2.1 单词 Embedding2.2 位置 Embedding3. Self-Attention(自注意力机制)3.1 Self-Attention 结构3.2 Q, K, V 的计算3.3 Self-Attention 的输…

《神经网络与深度学习》 邱希鹏 学习笔记(一)

一、机器学习的基本要素 机器学习的基本要素: 模型 学习准则 优化算法 其中模型分为线性和非线性。学习准则有用损失函数来评价模型的好坏,还有经验风险最小化准则,大概意思就是在平均损失函数中获得最小的损失函数,但是因为样本可能很小&…

Goodbye 2022,Welcome 2023 | 锁定 2023

引言又是一年春来到,新年应比旧年好。旧岁已辞,新年已到,新旧更迭之际,真想剪个头发换身行头,就能重新出发。但终究是要回头看看啊,那一路而来的荆棘与芬芳,才是成长的印记啊。那就回拨记忆&…

和涤生大数据的故事

1自我介绍 大家好,我是泰罗奥特曼,毕业于东北的一所不知名一本大学,学校在一个小城市里面,最热闹的地方是一个四层楼的商城,专业是信息管理与信息系统,由于是调剂的,所以我也不知道这个专业是干…

一篇文章带你学完JavaScript基础知识,超全的JavaScript知识点总结

目录 内置函数 alert警告框 promopt提示框 console控制台 字面量 数字型 字符串型 变量 声明与赋值 类型检测 类型转换 比较运算符 逻辑运算符 条件句 if else switch break,continue while 赋值运算符 函数 关键字形式函数 变量认知 作用域 表达式…

什么样的故障让阿里云换了总裁?

📣📣📣📣📣📣📣 🎍大家好,我是慕枫 🎍前阿里巴巴高级工程师,InfoQ签约作者、阿里云专家博主,一直致力于用大白话讲解技术知识 &#x…

SpringBoot数据访问Redis

目录 前言 1、Redis自动配置 2、RedisTemplate与Lettuce 3、切换至jedis 前言 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串…

基于贝叶斯算法的邮件过滤管理系统的设计和实现(Vue+SpringBoot)

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…

Java对象引用级别

为了使程序能更灵活地控制对象生命周期,从 JDK1.2 版本开始,JDK把对象的引用级别由高到低分为强引用、软引用、弱引用、虚引用四种级别。 强引用 StrongReference 强引用是我们最常见的对象,它属于不可回收资源,垃圾回收器&…

区块链技术3--BTC协议

1数字货币中经常出现的问题:双花攻击 数字货币本身为带有签名的数据文件,可以进行复制。即:对用户来说,可以将同一货币花费两次。对货币添加唯一编号(不可篡改),每次支付向货币发行单位查询真伪…

数据标注平台(CVAT)安装及踩坑记录

目录 一、CVAT安装 step1 安装docker step2 获取权限 step3 获取权限 step4 克隆cvat源代码 step5 构建docker镜像 step6 运行Docker容器这一步要下载公共docker映像,耗时看网速,但是不会太久。 step6 创建管理员用户 step7 关闭cvat服务 二、…

算法第十二期——BFS-判重

目录 BFS判重 Python判重方法: set、字典 set()判重 字典判重 例题:跳蚱蜢 思路 【建模】 去重 代码一:字典去重(用list实现队列) 代码二:set()去重(用list实现队列) 代码二&#xff…

CRMEB开源商城部署在腾讯云2

目录PHP在安装过程中会监测Redish5跨域PHP在安装过程中会监测Redis public\install\index.php if (extension_loaded(redis)) {$redis <span class"correct_span">&radic;</span> 已安装;} else {$redis <a href"https://doc.crmeb.com/w…

2个大厂 100亿级 超大流量 红包 架构方案

2个大厂 100亿级 超大流量 红包 架构方案 文章目录2个大厂 100亿级 超大流量 红包 架构方案100亿级 红包 应用 场景概述百亿级 微信红包技术架构架构**南北分布****拆红包入账异步化****发拆落地&#xff0c;其他操作双层cache**高并发**红包算法****柔性降级方案**360w QPS 10…

Nginx与LUA(3)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e;在互联网应用中&#xff0c;很多场景都会涉及到高并发请求&#xff0c;如果不对这些请求做限制&#xff0c;那么服务器很快就会被挤垮。就像在12306买票一样&…

计算机图形学实习教程之基本图形的生成(扫描线填充算法+图形缩放算法+对称变换算法+消隐算法+金刚石图案算法),利用C#实现,附源码

环境&#xff1a;Win10Visual Studio 2022 Community 在本次实验中需要用到第一篇文章实验内容的代码及环境&#xff0c;详情请见&#xff1a;传送门 目录 一、实验目的 二、实验步骤 1.扫描线填充算法 2.图形的缩放算法 3.对称变换算法 4.消隐算法 5.金刚石图形算法 一…

Unity 3D 人形角色动画(Avatar)||Unity 3D 导航系统||Unity 3D 障碍物

Unity 3D 人形角色动画&#xff08;Avatar&#xff09; Mecanim 动画系统适合人形角色动画的制作&#xff0c;人形骨架是在游戏中普遍采用的一种骨架结构。。 由于人形骨架在骨骼结构上的相似性&#xff0c;用户可以将动画效果从一个人形骨架映射到另一个人形骨架&#xff0c…

基于Java+SpringBoot+Vue求职招聘系统设计与实现

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供毕业项目实战✌ 博主作品&#xff1a;《微服务实战》专栏是本人的实战经验总结&#xff0c;《Spring家族及微服务系列》专注…