用于增加值的cvWaitkey 我有一个用OpenCV编写的C++程序,它应该计算一个视差图。现在,我想在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; } }

用于增加值的cvWaitkey 我有一个用OpenCV编写的C++程序,它应该计算一个视差图。现在,我想在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; } },c++,opencv,C++,Opencv,键被声明为char键 我现在的问题如下。 如果我按n一切正常,如果我按m程序也会增加n和s。如果我按s,情况也一样。如果我按q什么也没有发生 我还尝试了使用if-else语句,结果是一样的。 这是因为键以任何方式保存了之前按下的按钮吗 也许你们中的某个人可以帮我解决这个问题。也许switch case的语法有问题。你有没有在每一个案例的结尾故意留下一个破绽陈述 switch(char(key)) { case 'n': numDISP+=16; bre

键被声明为
char键

我现在的问题如下。 如果我按
n
一切正常,如果我按
m
程序也会增加
n
s
。如果我按
s
,情况也一样。如果我按
q
什么也没有发生

我还尝试了使用if-else语句,结果是一样的。 这是因为
键以任何方式保存了之前按下的按钮吗


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

也许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;
  }

要在所有系统上工作,您不仅要使用break语句,还要执行以下操作:

int key;
key = waitKey() & 255;

请注意,我没有使用waitKey(0),因为它提供0毫秒的时间来绘制图像。实际上,waitKey需要时间才能将其静止

好吧,如果我用这个,什么都不管用了。问题是,我可以使用
std::cout Wait打印值,您是否希望按下'q'键来打破while循环?因为它只会中断switch语句。在switch语句中,它将继续执行下一个代码部分,直到找到一个
中断
。因此,您应该添加一个
中断之后
numDISP+=16
minDISP+=1
sadWindowsSize+=2如果您不希望在按下前一个键时执行它们。。。
break
只会将您带出switch语句,而不会带出循环!关于案例q,我认为他想退出函数。