目标
- 掌握在OpenCV窗口中插入跟踪条
- 掌握函数:cv2.getTrackbarPos()和cv2.createTrackbar()等
案例项目
下面我们将建立一个简单的应用来显示指定的颜色。这里将使用一个窗口显示颜色,三个跟踪条指定每一个BGR通道颜色。当滑动追踪条时,窗口的颜色相应改变。默认的初始颜色设定为黑色。
函数cv2.createTrackbar( trackbarname, winname, value, count, trackbarcallback),第一个参数是跟踪条名字,第二个参数是放置跟踪条的窗口的名字,第三个参数是默认值,第四个参数是最大值,第五个参数是每次追踪条值变化时执行的回调函数。回调函数总是会将追踪条的位置作为默认参数。在这个案例中,回调函数不会有任何功能,因此使用pass关键字跳过。
函数cv2.getTrackbarPos( trackbarname, winname)获取限制追踪条的位置,也就是但会现在的值。
追踪条的另一个应用是用来当按钮或者转换器。默认情况下,OpenCV没有按钮函数。因此,我们可以使用追踪条来实现这样的函数功能。在这个应用中,我们创建一个转换器,当转换器切换到on上,应用正常工作,否则屏幕将一直是黑色。
详细代码如下:
import numpy as np
import cv2 as cv
# 定义回调函数
def nothing(x):
pass
# 创建一个黑色图像和一个窗口
img = np.zeros((300,512,3), np.uint8)
cv.namedWindow('image')
# 创建三个追踪条实现颜色变换
cv.createTrackbar('R','image',0,255,nothing)
cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)
# 创建一个切换器实现ON/OFF函数
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
# 获取追踪条现在的位置(也就是现在的值)
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()
应用结果如下: