加入滑杆 ( Trackbar )
滑杆 ( Trackbar ) 又称作滑动条、Slider bar,是一种可以用鼠标调整数值的 UI 界面,这篇教学会介绍如何在 OpenCV 视窗中加入滑杆,并读取滑杆数值,进一步调整图像的亮度和对比度。
快速导览:
因为程序中的 OpenCV 会需要使用镜头或 GPU,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda ) ,并安装 OpenCV 函数库 ( 参考:OpenCV 函数库 )。
在视窗中加入滑杆
透过 cv2.createTrackbar 方法,能够 OpenCV 产生的指定视窗中加入滑杆,搭配 cv2.setTrackbarPos 方法,可以指定特定滑杆的初始值,使用方法如下:
cv2.createTrackbar('滑桿名稱', '視窗名稱', min, max, fn)
# min 最小值 ( 最小為 0,不可為負值 )
# max 最大值
# fn 滑桿數值改變時要執行的函式
cv2.setTrackbarPos('滑桿名稱','視窗名稱', val)
# val 滑桿預設值
下方的程序码会在视窗中加入一个数值区间为 0~255 的滑杆,当鼠标调整滑杆时,就会印出对应的数值。
import cv2
img = cv2.imread('mona.jpg')
cv2.imshow('oxxostudio', img)
def test(val):
print(val)
cv2.createTrackbar('test', 'oxxostudio', 0, 255, test)
cv2.setTrackbarPos('test', 'oxxostudio', 50)
keycode = cv2.waitKey(0)
cv2.destroyAllWindows()
透过滑杆,调整图像亮度与对比度
延伸“调整图像的对比和亮度”范例,将程序修改为调整滑杆时,可以调整图像的亮度和对比度。
import cv2
img = cv2.imread('mona.jpg')
cv2.imshow('oxxostudio', img)
contrast = 0 # 初始化要調整對比度的數值
brightness = 0 # 初始化要調整亮度的數值
cv2.imshow('oxxostudio', img)
# 定義調整亮度對比的函式
def adjust(i, c, b):
output = i * (c/100 + 1) - c + b # 轉換公式
output = np.clip(output, 0, 255)
output = np.uint8(output)
cv2.imshow('oxxostudio', output)
# 定義調整亮度函式
def brightness_fn(val):
global img, contrast, brightness
brightness = val - 100
adjust(img, contrast, brightness)
# 定義調整對比度函式
def contrast_fn(val):
global img, contrast, brightness
contrast = val - 100
adjust(img, contrast, brightness)
cv2.createTrackbar('brightness', 'oxxostudio', 0, 200, brightness_fn) # 加入亮度調整滑桿
cv2.setTrackbarPos('brightness', 'oxxostudio', 100)
cv2.createTrackbar('contrast', 'oxxostudio', 0, 200, contrast_fn) # 加入對比度調整滑桿
cv2.setTrackbarPos('contrast', 'oxxostudio', 100)
keycode = cv2.waitKey(0)
cv2.destroyAllWindows()
微信扫码关注
抖音扫码关注