我有一个用c ++用opencv编写的程序,它应该计算一个视差图。现在我想用这样的值循环播放这些值:
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
以任何方式保存按下的按钮吗?
也许有人可以帮助我。
答案 0 :(得分: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 :(得分:0)
在所有系统上工作,不仅要使用break语句,还要执行此操作:
int key;
key = waitKey() & 255;
请注意,我没有使用waitKey(0),因为它提供0毫秒来绘制图像。在实践中,waitKey将花费时间来绘制它。