【OpenCV-Python】滑动条的创建和使用(createTrackbar())

滑动条(Trackbar)是一种可以动态调节参数的工具,它依附于窗口而存在。由于OpenCV中没有“按钮”功能,我们还可以用仅含0/1的滑动条来实现按钮的按下和弹起(开启和关闭)效果。

createTrackbar() 这个函数用于创建一个可以调整数值的滑动条,并将滑动条附加到指定的窗口上。

该函数的参数有:createTrackbar(const String& trackbarname, const String& winname, int *value, int count, TrackbarCallback onChange = 0, void *userdata = 0),具体含义为:

  • trackbarname:跟踪栏名称,创建的轨迹栏的名称。
  • Winname:窗口的名字,表示这个轨迹条会依附到哪个窗口上,即对应namedWindow()创建窗口时填的窗口名。 
  • value:指向整数变量的可选指针,该变量的值反映滑块的初始位置。
  • count:表示滑块可以达到的最大位置的值,最小位置始终为0。
  • onChange:指向每次滑块更改位置时要调用的函数的指针,有默认值0。此函数的原型应为void XXX (int, void *); ,其中第一个参数是轨迹栏位置,第二个参数是用户数据(请参阅下一个参数)。如果回调是NULL指针,则不调用任何回调,而仅更新值。
  • userdata:传递给回调的用户数据,有默认值0。它可以用于处理轨迹栏事件,而无需使用全局变量。如果使用的第三个参数value实参是全局变量的话,完全可以不去管这个userdata参数。

对于 getTrackbarPos() 函数,它也需要多个参数:

  • 第一个参数是Tarckbar 名称;
  • 第二个参数是它附加到的窗口名称;
  • 第三个参数是默认值;
  • 第四个参数是最大值;
  • 第五个是执行的回调函数每次跟踪栏值更改。回调函数始终具有默认参数,即轨迹栏位置。

在这里,我们将创建一个简单的应用程序,以通过滑动轨迹栏显示指定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()

运行结果如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章