2015-02-05 49 views
1

我有一個用C++編寫的用opencv編寫的應該計算視差圖的程序。現在我想玩弄wihin while循環看起來像這樣的價值觀:用於增加值的cvWaitkey

while(true) { 

    cv::StereoSGBM disparity(minDISP,numDISP,SADWindowSize, disparitySmoothness1, disparitySmoothness2); 
    cv::Mat disparityMap, disparityNorm; 

    disparity(undistortedLeft[1], undistortedRight[1], disparityMap); 
    disparityMap*=(1/16.0); 
    cv::normalize(disparityMap, disparityNorm, 0,255, cv::NORM_MINMAX, CV_8U); 
    cv::imshow("disparityMap", disparityNorm); 
    key = cv::waitKey(0); 

    switch(char(key)) { 
    case 'n': numDISP+=16; 
    case 'm': minDISP+=1; 
    case 's': SADWindowSize+=2; 
    case 'q': break; 
    } 
} 

鍵被聲明爲char key;

我現在有問題如下。 如果我按n一切正常,如果我按m程序增加ns以及。如果我按s也是如此。如果我按q什麼都沒有發生。

我也試過使用if else語句,它是相同的結果。 這是因爲key以任何方式保存之前按下的按鈕嗎?

也許有人可以幫助我。

+0

好吧,如果我使用這個沒有任何工作了。事情是,我可以使用'std :: cout << key打印值; '顯示確切的字符值(exec鍵,如esc或shift) – hGen 2015-02-05 14:55:08

+0

等待,你是否想按'q'鍵來打破你的while循環嗎?因爲它只會讓你脫離switch語句。 – AndyG 2015-02-05 15:00:23

+0

在開關的情況下,它會繼續下一個代碼部分,直到找到一個「break」。所以你應該在'numDISP + = 16;''minDISP + = 1;''和'SADWindowSize + = 2;'之後添加一個'break';如果你不想在按下其中一個鍵時執行它們, break'只會讓你跳出switch語句,而不是跳出循環!案例q中 – Micka 2015-02-05 15:07:25

回答

2

也許在switch-case的語法上有問題。每個案件結束時你是否故意留下陳述?

switch(char(key)) 
{ 
    case 'n': 
     numDISP+=16; 
     break; 
    case 'm': 
     minDISP+=1; 
     break; 
    case 's': 
     SADWindowSize+=2; 
     break; 
    case 'q': 
     // do nothing 
     break; 
    } 
+1

我想他想退出功能。 – GPPK 2015-02-05 15:06:16

0

在所有系統上,你不僅使用break語句,但也做這方面的工作:那我不使用waitKey(0),因爲它給了0毫秒繪製

int key; 
key = waitKey() & 255; 

注意你的圖片。在實踐中,waitKey將需要時間來繪製它。