2013-02-10 54 views
0

我正在嘗試使用OpenCV提供的createTrackbar函數在我的OpenCV應用程序上創建一個跟蹤欄。OpenCV createTrackbar

我想添加三條軌道條,其中一條可以在顏色範圍內混洗,另一條可以通過Canny過濾器值進行混洗,第三條可以通過medianBlur值進行混洗。

我很努力將指針添加到一個整型變量,其值將反映滑塊的位置。

因此,這裏是我的INRANGE &坎尼過濾& medianNlur功能:

Mat range_out; 
     inRange(blur_out, Scalar(100, 100, 100), Scalar(120, 255, 255), range_out); 

    Mat mBlur; 
     medianBlur(erode,mBlur,7); 

     Mat canny_out; 
     Canny(mBlur, canny_out, 125,350); 


     createTrackbar("Colour values: ", window_Output, &range_out, 255); 
createTrackbar("Colour values: ", window_Output, &mBlur, 7); 
createTrackbar("Colour values: ", window_Output, &canny_out, 350); 

從我讀的變量必須是整數(即range_out是矩陣mat不是int)

可能有人直接我到一個體面的教程,我可以找到我正在尋找的答案或解釋如何去做。

+0

在http://docs.opencv.org/modules/highgui/doc/user_interface.html之前,您不能指向'createTrackbar'的'Mat',這必須是'int'。 – JavaCake 2013-02-10 21:13:36

+0

是的,我知道是說,但一個問題仍然是我怎麼做,然後.....? – Tomazi 2013-02-10 21:15:12

+0

我已經添加了答案,但我也想參考下面的示例http://docs.opencv.org/doc/tutorials/highgui/trackbar/trackbar.html – JavaCake 2013-02-10 21:34:53

回答

0

我通常以下面的方式使用回調函數,這使得代碼不那麼麻煩。

const int median_blur_max = 5; 
int median_blur; 
Mat img; 
Mat src, dst; 

void callBackFunction(int, void*) { 
    medianBlur(src,dst,median_blur); 
    imshow("Controls", img); 
} 

int main(int argc, char** argv) { 
    namedWindow("Controls", 1); 
    createTrackbar("Median blur", "Controls", &median_blur, median_blur_max, callBackFunction); 

    callBackFunction(median_blur, 3); 

    waitKey(0); 
    return 0; 
} 

該示例不完整,但很好地概述了callBackFunction的元素和用法。

,如果你想改變你的功能Mat與否看來我不清楚,但如果多數民衆贊成的情況下,你可以改變一個給定函數調用墊callBackFunction只需添加一個switch-caseif-sentence