2009年6月4日 星期四

HW6 - Callback function (以Trackbar為例)

製作一 Trackbar 用以調整灰階影像成為黑白影像之Threshold值


char TrackbarName[]="Threshold";
int TrackbarInitValue=127;
int TrackbarStopValue=255;
IplImage* gray = NULL;
IplImage* bw = NULL;

int main( int argc, char** argv )
{

// Show Trackbar
cvCreateTrackbar(TrackbarName,"ShowTrackbar",
&TrackbarInitValue,TrackbarStopValue,onTrackbar);


onTrackbar(127);

cvWaitKey(0); //等待按鍵

}

void onTrackbar(int position)
{
cvThreshold(gray, bw,position,255,CV_THRESH_BINARY);
cvShowImage("Show Trackbar",bw);
}

在此程式中 onTrackbar() 即為一Callback Function
它是用來給系統呼叫的Function

在使用Callback Function時, 你的程式須向系統作簽到的動作, 即你要使用哪一個Callback Function, 此程式cvCreateTrackbar()指令即為此用途, 當系統有相對事件發生後, 此Callback Function就會被執行

問題:
請上網查 Callback Function 的定義

1. 程式中 cvWaitKey(0) 若不執行會如何 ???
2. cvWaitKey(0) 在 cvCreateTrackbar() 之前又會怎樣 ???
3. onTrackbar(127); 可不執行嗎 ???

1 則留言:

  1. callback function 可以說是「如果發生了某件事,就做這件事」。
    既然都叫我們上網查了,感覺上查到最好懂的就是這樣一句話.
    也就是在寫程式的過程中,我們寫好了一個function,而且讓這個function在符合的條件下執行,如果條件不符合,那麼function就不會執行.

    1.cvWaitKey(0)
    這個東西不執行的話,圖片的畫面就不會停留,變成一執行程式之後,畫面只會閃一下就跳掉了.

    2.cvWaitKey(0)在cvCreateTrackbar()之前
    如果放在cvCreateTrackbar()之前,執行結果會面成灰色的畫面.

    3.onTrackbar(127)
    當然可以不執行...不執行程式一樣會跑,不過執行的結果一樣會是灰色的畫面...= =

    回覆刪除