本篇文章,将学习如何进行轨迹条操作。主要学习函数getTrackbarPos()和createTrackbar()使用。
环境:Windows 7(64) python 3.6 opencv 3.4.2
一、了解函数
轨迹条使用起来非常的方便,通过鼠标滑动轨迹条,可以实时看到效果,在调参时用处很大。
1.1 函数createTrackbar()
函数createTrackbar()的函数形式如下:
int createTrackbar( const String & trackbarname,const String & winname,int * value,int count,TrackbarCallback onChange = 0,void * userdata = 0 )
功能:在指定的窗口创建一个轨迹条。可将变量值与轨迹条关联,当轨迹条位置改变时就调用回调函数onChange。
参数:
trackbarname:为轨迹条起个名字。
winname:指定在什么窗口创建轨迹条。
value:指向整数变量的指针,该变量的值反映滑块的位置。
count:轨迹条可滑动的最大值。 最小值始终为0。
onChange:每次滑块更改位置时要调用的函数。 该函数原型为void Foo(int,void *); ,其中第一个参数是轨迹栏位置,第二个参数是用户数据(参见下一个参数)。 如果回调是NULL指针,则不会调用任何回调,但只更新值。默认为0。
userdata:按原样传递给回调的用户数据。 它可用于处理轨迹栏事件而无需使用全局变量。默认为0。
1.2 函数getTrackbarPos()
函数getTrackbarPos()的函数形式如下:
retval = cv.getTrackbarPos(trackbarname, winname)
功能:返回轨迹条当前位置
参数:
trackbarname:轨迹条的名称。
winname:轨迹条所在的窗口名称。
二、编程实现
用轨迹条实现调色板。代码如下:
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(0~255)','image',0,255,nothing)
cv.createTrackbar('G(0~255)','image',0,255,nothing)
cv.createTrackbar('B(0~255)','image',0,255,nothing)
while(1):
cv.imshow('image',img)
k = cv.waitKey(1) & 0xFF
if k == 27:
break
#获得当前轨迹条的值
r = cv.getTrackbarPos('R(0~255)','image')
g = cv.getTrackbarPos('G(0~255)','image')
b = cv.getTrackbarPos('B(0~255)','image')
img[:] = [b,g,r]
cv.destroyAllWindows()
程序运行结果图如下: