cvWaitkey 用于增加值

cvWaitkey for for increasing values

我有一个用 c++ 和 opencv 编写的程序,它应该计算视差图。现在我想在一个 while 循环中使用这些值,如下所示:

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以任何方式保存了之前按下的按钮吗?

也许你们中有人可以帮我解决这个问题。

可能是switch-case的语法有问题。你有没有在每个案例的结尾故意留下 break 语句?

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

要在所有系统上工作,您不仅要使用 break 语句,还要这样做:

int key;
key = waitKey() & 255;

请注意,我没有使用 waitKey(0),因为它需要 0 毫秒来绘制图像。实际上 waitKey 需要时间来绘制它。