• Python OpenCV 通过trackbar调整图像亮度对比度颜色


    上一篇文章通过设置固定值的方式来调整图像,这篇文章通过trackbar来动态调整参数,从而实时展现图像处理结果,得到想要的图像处理参数。

    1. 创建trackbar

    1. import cv2
    2. import numpy as np
    3. def nothing(x):
    4. pass
    5. cv2.namedWindow('image')
    6. # 创建5个进度条,分别是R,G,B,对比度和亮度
    7. # 参数含义 'Red': bar条的名字, 'image':窗口名称 127: 默认值 254: bar条最大值, nothing:处理函数
    8. cv2.createTrackbar('Red', 'image', 127, 254, nothing)
    9. cv2.createTrackbar('Green', 'image', 127, 254, nothing)
    10. cv2.createTrackbar('Blue', 'image', 127, 254, nothing)
    11. cv2.createTrackbar('alpha', 'image', 100, 200, nothing)
    12. cv2.createTrackbar('beta', 'image', 127, 254, nothing)

    2. 获取bar条数值

    1. # get current positions of all trackbars
    2. red = cv2.getTrackbarPos('Red', 'image')
    3. green = cv2.getTrackbarPos('Green', 'image')
    4. blue = cv2.getTrackbarPos('Blue', 'image')
    5. alpha = cv2.getTrackbarPos('alpha', 'image')
    6. beta = cv2.getTrackbarPos('beta', 'image')

    3. 导入图像,设置图像对比度和亮度

    1. image_src = cv2.imread('C:\\D\\temp\\205250_last.png')
    2. image = cv2.convertScaleAbs(image_src, alpha=alpha/100, beta=beta - 127)

    4. 分离出图片的B,R,G颜色通道, 从bar条中获取对应数值,并完成计算

    1. B, G, R = cv2.split(image) # 分离出图片的B,R,G颜色通道
    2. red_factor = np.full(image.shape[:2], red-127, dtype="uint8") # 创建与image相同大小的矩阵
    3. R_temp = R + red_factor
    4. green_factor = np.full(image.shape[:2], green-127, dtype="uint8") # 创建与image相同大小的矩阵
    5. G_temp = G + green_factor
    6. blue_factor = np.full(image.shape[:2], blue-127, dtype="uint8") # 创建与image相同大小的矩阵
    7. B_temp = B + blue_factor

    上面的代码是对bar条的数值进行加减计算,根据需要,对于bar条数值的处理,也可以按照比例来调整:

    1. red_factor = round(red/100, 2) # 红色bar条数值除以100,保留2位小数
    2. R_temp = np.rint(np.multiply(R, red_factor)) # 将Red通道数据与red_factor相乘,保留整数
    3. R_temp = R_temp.astype("uint8") #转换数据类型

    5. 合并颜色通道并在窗口显示

    1. output = cv2.merge([B_temp, G_temp, R_temp])
    2. cv2.imshow('image', output)

    最终效果:

    修改部分参数的结果:

  • 相关阅读:
    React Hooks概述及常用的React Hooks介绍
    【报错解决】java:错误:无效的源发行版:15
    linux驱动30:度量时间差
    全网最全音视频媒体流
    CI/CD --git版本控制系统
    MFC工控项目实例二十七添加产品参数
    可以在家干的兼职都有哪些呢?做自媒体怎么样?
    Android OpenGL ES 3.0 3D模型介绍以及加载和渲染
    android api 34 编译ffmpeg with libfdk-aac
    异步FIFO设计的仿真与综合技术(3)
  • 原文地址:https://blog.csdn.net/wgwg1985/article/details/134420984