Python - OpenCV利用滚动条实时调节图片亮度、强度、饱和度

(1)python API讲解
1.创建滑动条
cv2.createTrackbar(trackbarName, windowName, value, count, onChange)-> None

参数:
	trackbarName:滑动条名称
	windowName:所在窗口名
	value:初始值
	count:最大值
	onChange:回调函数名称
返回值:无

2 获取滑动条数据
cv2.getTrackbar(trackbarname, winname)-> retval

参数:
	trackbarname:滑动条名称
	winname:所在窗口名
返回值:滚动条所在位置的值

(2)代码示例

import numpy as np
import cv2

# 回调函数,未使用
def nothing(x):
    pass

# 将BGR图像转化为HSV图像
win_img = "new"
win_img_old = "old"
pic = cv2.imread("./a.jpg", cv2.IMREAD_UNCHANGED)
pic1 = cv2.cvtColor(pic, cv2.COLOR_BGR2HSV)


# 显示原图像做对比
cv2.namedWindow(win_img_old, cv2.WINDOW_NORMAL) 
cv2.imshow(win_img_old, pic) 

# 新图像窗口
cv2.namedWindow(win_img, cv2.WINDOW_AUTOSIZE) 
#初始化滚动条
cv2.createTrackbar("H",win_img, 100, 150, nothing)
cv2.createTrackbar("S",win_img, 100, 150, nothing)
cv2.createTrackbar("V",win_img, 100, 150, nothing)

while True:
	# ESC按下退出
    if cv2.waitKey(10) == 27:
        print("finish adjust picture and quit")
        break
	# 读取滚动条现在的滚动条的HSV信息
    h_value = float(cv2.getTrackbarPos("H",win_img)/100)
    s_value = float(cv2.getTrackbarPos("S",win_img)/100)
    v_value = float(cv2.getTrackbarPos("V",win_img)/100)
	# 拆分、读入新数据后,重新合成调整后的图片
    H, S, V = cv2.split(pic)
    new_pic = cv2.merge([np.uint8(H*h_value) , np.uint8(S*s_value) , np.uint8(V*v_value)])
    cv2.imshow(win_img, new_pic)

cv2.destroyAllWindows()

(3)效果展示

设置色调(H),饱和度(S),明度(V)范围都是 [0, 150%], 初始值都是原始位置。不断调节后,效果如下所示:

Python - OpenCV利用滚动条实时调节图片亮度、强度、饱和度_第1张图片
感觉还是挺有意思的,以后要调节图片色调的时候可以试试看~~

你可能感兴趣的:(python-opencv,图像处理)