我有一個用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
程序增加n
和s
以及。如果我按s
也是如此。如果我按q
什麼都沒有發生。
我也試過使用if else語句,它是相同的結果。 這是因爲key
以任何方式保存之前按下的按鈕嗎?
也許有人可以幫助我。
好吧,如果我使用這個沒有任何工作了。事情是,我可以使用'std :: cout << key打印值; '顯示確切的字符值(exec鍵,如esc或shift) – hGen 2015-02-05 14:55:08
等待,你是否想按'q'鍵來打破你的while循環嗎?因爲它只會讓你脫離switch語句。 – AndyG 2015-02-05 15:00:23
在開關的情況下,它會繼續下一個代碼部分,直到找到一個「break」。所以你應該在'numDISP + = 16;''minDISP + = 1;''和'SADWindowSize + = 2;'之後添加一個'break';如果你不想在按下其中一個鍵時執行它們, break'只會讓你跳出switch語句,而不是跳出循環!案例q中 – Micka 2015-02-05 15:07:25