2011-07-24 45 views
1

Learning OpenCV書的程序:我們在哪裏獲取此參數的值?

void onTrackbarSlide(int pos) 
{ 
cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos); 
} 

而且,在另一個位置:

if(frames!=0) 
{ 
cvCreateTrackbar("Position","Example3",&g_slider_position,frames,onTrackbarSlide); 
} 

我們在哪裏從onTrackSlide(int pos)功能檢索的pos價值?將從cvCreateTrackbar()傳遞給它什麼值?

回答

2

Check the docs,你會看到函數簽名是:

cvCreateTrackbar(const char* trackbarName, const char* windowName, int* value, int count, CvTrackbarCallback onChange) 

注意,最後一個參數的類型爲CvTrackbarCallback。顯然,這不是內置類型,而是由OpenCV定義的類型。因此,我們回去的文檔找到更多關於它和有趣的是,這些信息顯示出來:

功能cvCreateTrackbar()使用指定的名稱和範圍,受讓人創建一個跟蹤條(又名滑塊或範圍控制)一個要跟蹤欄位置同步的變量,並指定一個回調函數在跟蹤欄位置改變時被調用。

,右下面這一段,你可以看到一個CvTrackbarCallback應如何聲明:

CV_EXTERN_C_FUNCPTR(void (*CvTrackbarCallback)(int pos)); 

總之,爲了調用cvCreateTrackbar()你需要聲明的簽名void some_fun(int pos)的功能,是當軌跡欄的滑塊被更新時能夠被OpenCV通知。自變量int pos通知滑塊的新位置。

4

我不知道OpenCV - 但它看起來像onTrackbarSlide是某種事件處理程序,所以它會從您創建的跟蹤欄UI傳遞一個pos值。

沒有任何pos值從cvCreateTrackbar()直接傳遞 - 看起來它創建了您的trackbar用戶界面,然後如果與用戶交互將調用onTrackBarSlide

+0

感謝您的回覆。正如你可以在'cvCreateTrackbar'中看到的那樣,'onTrackbarSlide'作爲參數傳遞,但是'onTrackbarSlide(int pos)'調用發生在哪裏? – Simplicity

+0

@ Med-SWEng這個調用是由OpenCV的一個內部函數完成的,當你更新軌跡條的滑塊時,你可以知道這個函數。 – karlphillip

相關問題