怎么用python制作滑动条形式的调色器?
1、先制作一个图像窗口:
import cv2
cv2.namedWindow('a')

2、在图像窗口里面插入一个滑动条:
def nothing(x):
pass
cv2.createTrackbar('R','a',99,255,nothing)
这是创建滑动条的函数;
参数“R”表示滑动条的名称;
“a”表示这个滑动条放在图像窗口a里面;
99表示滑动条的当前位置是99;
255表示滑动条的最大值,这个滑动条的取值范围是0到255之间的整数;
nothing是上面创建的自定义函数,暂时什么都不做。

3、拖动一下滑动条,会发现没变化,这是因为窗口里面还没有图像。

4、创建一个300*100的黑色img:
img=np.zeros((100,300,3),np.uint8)
注意此时加载了numpy模块;
这是一个3通道的黑色图片,像素值都是0。

5、但是此时拖动滑块,图像颜色还是没有变化。
因为:
滑动条的值还没有与图像像素值绑定。

6、下面把像素值与滑动值绑定:
r=cv2.getTrackbarPos('R','a')
img[:,:,2]=r
cv2.imshow('a',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意,cv2里面,默认的红色通道是第三通道,三通道的顺序为B、G、R。

7、但是,滑块还是无法改变图像颜色。
这是因为,滑动条的值改变了,但是r的值并没有随之而改变,或者说,程序运行没有刷新。

8、用while循环加上一个switch语句,可以让程序保持随时可以刷新:
switch='0:OFF\n1:ON'
cv2.createTrackbar(switch,'a',0,1,nothing)
#上面这是一个开关(也是滑动条),只有0和1两个值;
while(1):
cv2.imshow('a',img)
k=cv2.waitKey(1)&0xFF
if k==27:
break
r=cv2.getTrackbarPos('R','a')
s=cv2.getTrackbarPos(switch,'a')
if s==0:
img[:]=0
else:
img[:]=[0,0,r]
打开开关,滑动条才能起作用。

9、再加上绿色和蓝色滑动条。
注意,img的大小被改了。

10、整体效果:
