Commutateur cas pour l'affichage des différents OpenCV des filtres à l'aide de menus de la console

Je suis en train de faire une base de menus de la console à l'aide de cas de commutateur avec le C++. Dit menu donne la possibilité de choisir entre les différents filtres mis en œuvre à l'aide d'opencv. Je suis relativement nouveau pour les deux opencv et C++, donc je suis sûr que le code pourrait être plus efficace ou bien mis en œuvre.

Une partie du code pour le menu ressemble à:

void updateMenu(void){
cin >> opc;
switch (opc)
{
    case 1:
        cout << "Media \n";
        media(image, res1, 5);
        imshow("Media", res1);
        break;

Alors que le principal ressemble:

int main(){
image = imread("image.jpg", IMREAD_GRAYSCALE);

menu();

while (open)
{
    updateMenu();
}

return 0;
}

menu() affiche les options. open est un booléen par défaut vrai que les changements à la valeur false lorsque 0 est pressé.

médias, a déclaré:

void media(Mat& imagen, Mat& returnMat, int var) 

étant le premier Tapis de la source, la deuxième le destin d'où le résultat sera enregistré, et var la valeur pour le filtre médian.

Ce code entraîne dans cette image. Comme on le voit, il affiche un écran gris avec rien sur elle. Si je change le principal pour contenir le code à l'intérieur de la principale (voir ci-dessous), l'image sera filtré, résultant dans ce.

int main()
{
image = imread("image.jpg", IMREAD_GRAYSCALE);

media(image, res1, 5);
imshow("Media", res1);
waitKey(0);

return 0;
}

J'essaie de comprendre ce que l'erreur peut être. Pas de messages d'erreur sont affichés. Est-il quelque chose de mal à propos à l'aide de l'interrupteur cas de cette façon, ou est-il un moyen plus efficace de faire le même menu sans changer?

Merci!

Mise à JOUR

J'ai trouvé mon erreur. Pour toute personne confrontée à des problèmes similaires, tout ce que j'avais à faire est de tourner le booléen ouvert à faux avant de l'interrupteur cas, et tourner encore vrai après.

Aussi, j'ai eu à créer et, plus tard, de détruire une fenêtre:

        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;
0
2019-09-17 20:01:00
source
0 réponses

Voir d'autres questions sur les étiquettes