【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()

運行結果如下:

 

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