我有一个用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