1. 程式人生 > >【Python+OpenCV入門學習】七、軌跡條操作

【Python+OpenCV入門學習】七、軌跡條操作

本篇文章,將學習如何進行軌跡條操作。主要學習函式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()

程式執行結果圖如下: