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

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

  1. 创建trackbar
python 复制代码
import cv2
import numpy as np


def nothing(x):
    pass

cv2.namedWindow('image')
# 创建5个进度条,分别是R,G,B,对比度和亮度
# 参数含义 'Red': bar条的名字, 'image':窗口名称 127: 默认值 254: bar条最大值, nothing:处理函数
cv2.createTrackbar('Red', 'image', 127, 254, nothing) 
cv2.createTrackbar('Green', 'image', 127, 254, nothing)
cv2.createTrackbar('Blue', 'image', 127, 254, nothing)
cv2.createTrackbar('alpha', 'image', 100, 200, nothing)
cv2.createTrackbar('beta', 'image', 127, 254, nothing)
  1. 获取bar条数值
python 复制代码
# get current positions of all trackbars
red = cv2.getTrackbarPos('Red', 'image')
green = cv2.getTrackbarPos('Green', 'image')
blue = cv2.getTrackbarPos('Blue', 'image')
alpha = cv2.getTrackbarPos('alpha', 'image')
beta = cv2.getTrackbarPos('beta', 'image')
  1. 导入图像,设置图像对比度和亮度
python 复制代码
image_src = cv2.imread('C:\\D\\temp\\205250_last.png')

image = cv2.convertScaleAbs(image_src, alpha=alpha/100, beta=beta - 127)
  1. 分离出图片的B,R,G颜色通道, 从bar条中获取对应数值,并完成计算
python 复制代码
B, G, R = cv2.split(image)  # 分离出图片的B,R,G颜色通道

red_factor = np.full(image.shape[:2], red-127, dtype="uint8")  # 创建与image相同大小的矩阵
R_temp = R + red_factor
green_factor = np.full(image.shape[:2], green-127, dtype="uint8")  # 创建与image相同大小的矩阵
G_temp = G + green_factor
blue_factor = np.full(image.shape[:2], blue-127, dtype="uint8")  # 创建与image相同大小的矩阵
B_temp = B + blue_factor

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

python 复制代码
red_factor = round(red/100, 2) # 红色bar条数值除以100,保留2位小数
R_temp = np.rint(np.multiply(R, red_factor)) # 将Red通道数据与red_factor相乘,保留整数
R_temp = R_temp.astype("uint8") #转换数据类型
  1. 合并颜色通道并在窗口显示
python 复制代码
output = cv2.merge([B_temp, G_temp, R_temp])
cv2.imshow('image', output)

最终效果:

修改部分参数的结果:

相关推荐
nbsaas-boot17 分钟前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql
仗剑_走天涯19 分钟前
基于pytorch.nn模块实现线性模型
人工智能·pytorch·python·深度学习
chao_78921 分钟前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
chao_7895 小时前
二分查找篇——搜索旋转排序数组【LeetCode】一次二分查找
数据结构·python·算法·leetcode·二分查找
烛阴5 小时前
Python装饰器解除:如何让被装饰的函数重获自由?
前端·python
noravinsc6 小时前
django 一个表中包括id和parentid,如何通过parentid找到全部父爷id
python·django·sqlite
ajassi20006 小时前
开源 python 应用 开发(三)python语法介绍
linux·python·开源·自动化
沉默媛6 小时前
如何安装python以及jupyter notebook
开发语言·python·jupyter
加油吧zkf7 小时前
Conda虚拟环境管理:从入门到精通的常用命令
图像处理·深度学习·计算机视觉·conda
Deng9452013147 小时前
基于Python的旅游数据可视化应用
python·numpy·pandas·旅游·数据可视化技术