使用控制台菜单显示不同OpenCV过滤器的开关盒 我试图用C++的Caskcase来制作一个基本的控制台菜单。该菜单提供了在使用opencv实现的不同过滤器之间进行选择的选项。我对OpenCV和C++都是相当新的,所以我相信代码可以更有效或更好地实现。

使用控制台菜单显示不同OpenCV过滤器的开关盒 我试图用C++的Caskcase来制作一个基本的控制台菜单。该菜单提供了在使用opencv实现的不同过滤器之间进行选择的选项。我对OpenCV和C++都是相当新的,所以我相信代码可以更有效或更好地实现。,c++,opencv,switch-statement,C++,Opencv,Switch Statement,菜单的部分代码如下所示: void updateMenu(void){ cin >> opc; switch (opc) { case 1: cout << "Media \n"; media(image, res1, 5); imshow("Media", res1); break; int main(){ image = imread("image.jpg", IMREAD_GRAYSCALE)

菜单的部分代码如下所示:

void updateMenu(void){
cin >> opc;
switch (opc)
{
    case 1:
        cout << "Media \n";
        media(image, res1, 5);
        imshow("Media", res1);
        break;
int main(){
image = imread("image.jpg", IMREAD_GRAYSCALE);

menu();

while (open)
{
    updateMenu();
}

return 0;
}
menu()打印选项。open是一个默认为true的布尔值,当按下0时,它将更改为false

媒体声明:

void media(Mat& imagen, Mat& returnMat, int var) 
作为源的第一个Mat,第二个Mat表示结果将保存到的destiny,而var表示中值滤波器的值

这段代码导致了这种情况。如图所示,它显示一个灰色屏幕,上面没有任何内容。如果我将main更改为仅包含main中的代码(如下所示),图像将被过滤,从而导致错误

我正在努力了解可能的错误。不会显示任何错误消息。以这种方式使用开关盒是否有问题,或者是否有一种更有效的方法在不使用开关的情况下使用相同的菜单

谢谢

更新

我发现了我的错误。对于任何面临类似问题的人,我所要做的就是在切换前将布尔值open设置为false,然后在切换后再次设置为true

此外,我还必须创建并随后销毁一个窗口:

        case 1:
        cout << "Media \n";
        media(image, aux, 5);
        hconcat(image, aux, res);
        namedWindow("Media", WINDOW_AUTOSIZE);
        imshow("Media", res);
        waitKey(0);
        destroyWindow("Media");
        break;
案例1:

如果我很清楚你想要什么,或者你有什么问题, 显然,在输入opc变量的值并按enter键后,opc变量(在代码示例中未提供该变量的类型)没有int类型的值1,因此不会执行1种情况的代码。当您使用var=5直接调用Media func时,一切都进行得很顺利,所以很明显,案例1被忽略了。 有时,我们并没有输入值并按下enter键,而此时我们并没有明确的控制台消息来显示预期要执行的操作

所以,可以肯定的是,发生了什么,请尝试将您的代码更改为类似这样的内容

void updateMenu(void) {
cout << "please enter 1 for filter 5, or any other value and press enter\n";
cin >> opc; // we can suppose that opc is declared out side
switch (opc)
{
    case 1:
    cout << "Media \n";
    media(image, res1, 5);
    imshow("Media", res1);
    break;
void更新单元(void){
cout>opc;//我们可以假设opc是对外声明的
交换机(opc)
{
案例1:
库特
void updateMenu(void) {
cout << "please enter 1 for filter 5, or any other value and press enter\n";
cin >> opc; // we can suppose that opc is declared out side
switch (opc)
{
    case 1:
    cout << "Media \n";
    media(image, res1, 5);
    imshow("Media", res1);
    break;