cvWaitkey用于增加值

时间:2015-02-05 14:45:45

标签: c++ opencv

我有一个用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,该计划也会增加ns。如果按s,也是如此。如果按q,则不会发生任何事情。

我也尝试使用if else语句,结果相同。 这是因为key以任何方式保存按下的按钮吗?

也许有人可以帮助我。

2 个答案:

答案 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将花费时间来绘制它。