滑动条(Trackbar)是一种可以动态调节参数的工具,它依附于窗口而存在。由于OpenCV中没有“按钮”功能,我们还可以用仅含0/1的滑动条来实现按钮的按下和弹起(开启和关闭)效果。
createTrackbar() 这个函数用于创建一个可以调整数值的滑动条,并将滑动条附加到指定的窗口上。
该函数的参数有:createTrackbar(const String& trackbarname, const String& winname, int *value, int count, TrackbarCallback onChange = 0, void *userdata = 0),具体含义为:
对于 getTrackbarPos() 函数,它也需要多个参数:
在这里,我们将创建一个简单的应用程序,以通过滑动轨迹栏显示指定R,G,G的颜色。默认情况下,初始颜色将设置为黑色,代码如下:
import numpy as np
import cv2 as cv
def nothing(x):
pass
# Create a black image, a window
img = np.zeros((300,512,3), np.uint8)
cv.namedWindow('image')
# create trackbars for color change
cv.createTrackbar('R','image',0,255,nothing)
cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)
# create switch for ON/OFF functionality
switch = '0 : OFF \n1 : ON'
cv.createTrackbar(switch, 'image',0,1,nothing)
while(1):
cv.imshow('image',img)
k = cv.waitKey(1) & 0xFF
if k == 27:
break
# get current positions of four trackbars
r = cv.getTrackbarPos('R','image')
g = cv.getTrackbarPos('G','image')
b = cv.getTrackbarPos('B','image')
s = cv.getTrackbarPos(switch,'image')
if s == 0:
img[:] = 0
else:
img[:] = [b,g,r]
cv.destroyAllWindows()
运行结果如下: