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

第三部分、滚动条操作

    • 第一节、滚动条操作
      • 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

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

注意:右图中的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.滚动条操作


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

计算机视觉OpenCv学习系列:第三部分、滚动条操作_第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学习系列:第三部分、滚动条操作_第3张图片

学习参考

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

你可能感兴趣的:(opencv,计算机视觉,学习)