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

第一节、滚动条操作

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liuyc-Code boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值