OpenCV-Python滚动条函数cv2.createTrackerbar()的使用

使用cv2.createTrackerbar()动态改变图像亮度

在使用opencv读取图像时,我们有时需要动态的改变图像的亮度,这就需要用到opencv自带的滚动滑块函数cv2.createTrackerbar()。通过官方文档可知该函数有5个参数:

  • trackbarName:滚动滑块的名称;
  • windowName:添加滚动滑块窗口的名称;
  • value:滑块的初始位置;
  • count:滑块可以移动的最大值;
  • onChange:指向每次滑块更改位置时要调用的函数的指针,有默认值0。此函数的原型应为void XXX (int, void *); ,其中第一个参数是轨迹栏位置,第二个参数是用户数据(请参阅下一个参数)。如果回调是NULL指针,则不调用任何回调,而仅更新值。

以下图为例去动态的修改图像的亮度:

在这里插入图片描述
具体代码:

# -*-coding:utf-8-*-
"""
File Name: trackBar_operation.py
Program IDE: PyCharm
Create File By Author: Hong
"""
import cv2 as cv
import numpy as np


def nothing(x):
    pass


def adjust_lightness(image_path: str, value=0, count=100):
    """
    使用滚动滑块调整图像的亮度
    :param image_path: 传入图像文件的路径
    :param value: 滑块初始位置
    :param count: 滑块可以移动的最大值
    :return: 没有返回值
    """
    img = cv.imread(image_path, cv.IMREAD_COLOR)

    cv.namedWindow('input', cv.WINDOW_KEEPRATIO)
    cv.createTrackbar('lightness', 'input', value, count, nothing)
    cv.imshow('input', img)

    blank = np.zeros_like(img)

    while True:
        pos = cv.getTrackbarPos('lightness', 'input')
        blank[:, :] = [pos, pos, pos]
        result = cv.add(img, blank)

        print('lightness: ', pos)
        cv.imshow('result', result)

        c = cv.waitKey(1)
        if c == 25:
            break


if __name__ == '__main__':
    path = 'images/daiyutong.png'
    adjust_lightness(path)

结果展示:通过移动滑块位置,可以实时查看图像的亮度变化。
在这里插入图片描述

添加双滑块,使用cv.addWeighted()动态改变图像的亮度和对比度

OpenCV中的融合函数cv.addWeighted()可以对两张图像进行融合或者将两张图像相加。该函数有7个参数。

  • src1 输入图片
  • alpha 第一张图片的权重
  • src2 和第一张输入图片有相同形状
  • beta 第二张图片的权重
  • gamma 静态权重,添加到图像的所有像素中
  • dst 默认值为None,dst = src1*alpha + src2*beta + gama

同样以上图为例,使用该函数同时调整图像的亮度和对比度。
具体代码是:

# -*-coding:utf-8-*-
"""
File Name: trackBar_operation.py
Program IDE: PyCharm
Create File By Author: Hong
"""
import cv2 as cv
import numpy as np


def nothing(x):
    pass

def trackbar_to_adjust(image_path: str):
    """
    通过OpenCV的tackBar滑块动态的修改图像的亮度和对比度
    :param image_path: 传入图片文件路径
    :return: 没有返回值
    """
    img = cv.imread(image_path)

    cv.namedWindow('input', cv.WINDOW_KEEPRATIO)
    cv.createTrackbar('lightness', 'input', 0, 100, nothing)  # 第3个参数代表滑块初始位置;第4个参数代表滑块可以滑动的最大值
    cv.createTrackbar('contrast', 'input', 100, 200, nothing)
    cv.imshow('input', img)
    blank = np.zeros_like(img)  # 创建一个与img形状相同的图像blank

    while True:
        light = cv.getTrackbarPos('lightness', 'input')  # 控制亮度的滚动条
        contrast = cv.getTrackbarPos('contrast', 'input') / 100  # 控制对比度的滚动条
        print('light: {}, contrast: {}.'.format(light, contrast))
        result = cv.addWeighted(img, contrast, blank, 0.5, light)

        cv.imshow('result', result)
        c = cv.waitKey(1)
        if c == 27:
            break

    cv.destroyAllWindows()
 
 
 if __name__ == '__main__':
    path = 'images/daiyutong.png'
    trackbar_to_adjust(path)

效果展示:
在这里插入图片描述
获取更多opencv和计算机视觉知识,请关注微信公众号 “AI与计算机视觉”

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hong_Youth

您的鼓励将是我创作的动力。

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

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

打赏作者

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

抵扣说明:

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

余额充值