Comment créer une simple fenêtre avec un seul bouton en utilisant OpenCV HighGui uniquement?

Je travaille sur un projet de jeu utilisant OpenCV. Maintenant, je dois faire une interface graphique simple: une fenêtre avec un bouton, en utilisant uniquement HighGui.

Je ne suis pas sûr mais je pense que je suis supposé utiliser quelque chose comme ceci:

cvNamedWindow( "NameWindow" , CV_WINDOW_AUTOSIZE); 

Toute aide est très appréciée.

    OpenCV ne fournit pas de bouton , mais vous pouvez facilement utiliser un rectangle coloré et vérifier si le point cliqué sur l’image se trouve à l’intérieur de ce rectangle.

    Rappelez-vous que OpenCV HighGui est très simple et n’est destiné qu’à des fins de débogage. Vous voudrez peut-être utiliser une bibliothèque graphique complète comme Qt ou similaire.

    Cependant, ceci est un petit exemple qui montre une image (verte) et un bouton en haut:

    entrez la description de l'image ici

    Cliquez sur le bouton pour imprimer “Cliqué” sur la sortie standard:

    entrez la description de l'image ici

    Code:

     #include  #include  using namespace cv; using namespace std; Mat3b canvas; ssortingng buttonText("Click me!"); ssortingng winName = "My cool GUI v0.1"; Rect button; void callBackFunc(int event, int x, int y, int flags, void* userdata) { if (event == EVENT_LBUTTONDOWN) { if (button.contains(Point(x, y))) { cout << "Clicked!" << endl; rectangle(canvas(button), button, Scalar(0,0,255), 2); } } if (event == EVENT_LBUTTONUP) { rectangle(canvas, button, Scalar(200, 200, 200), 2); } imshow(winName, canvas); waitKey(1); } int main() { // An image Mat3b img(300, 300, Vec3b(0, 255, 0)); // Your button button = Rect(0,0,img.cols, 50); // The canvas canvas = Mat3b(img.rows + button.height, img.cols, Vec3b(0,0,0)); // Draw the button canvas(button) = Vec3b(200,200,200); putText(canvas(button), buttonText, Point(button.width*0.35, button.height*0.7), FONT_HERSHEY_PLAIN, 1, Scalar(0,0,0)); // Draw the image img.copyTo(canvas(Rect(0, button.height, img.cols, img.rows))); // Setup callback function namedWindow(winName); setMouseCallback(winName, callBackFunc); imshow(winName, canvas); waitKey(); return 0; } 

    vous êtes conscient que openCV n’est pas une bibliothèque graphique, mais une bibliothèque de traitement d’image?

    il est livré avec highgui: http://docs.opencv.org/2.4/modules/highgui/doc/highgui.html

    pour les cas où vous n’avez pas vraiment d’autres options, mais que vous devez créer une fenêtre pour afficher des éléments.

    Alors que OpenCV a été conçu pour être utilisé dans des applications à grande échelle et peut être utilisé dans des frameworks d’interface utilisateur riches en fonctionnalités (tels que Qt *, WinForms * ou Cocoa *) ou sans aucune interface utilisateur, il est parfois nécessaire d’essayer les fonctionnalités rapidement et efficacement. visualiser les résultats. C’est pour cela que le module HighGUI a été conçu.

    voir OpenCV et créer des interfaces graphiques

    edit: “cela ne répond pas à la question”: -> plus d’aide ..

    vous ne pouvez pas.

    ou si vous connaissez votre gestionnaire de fenêtres sous-jacent, vous le pouvez. c’est-à-dire que si vous êtes sur Windows, vous pouvez obtenir le handle de fenêtre et append dynamicment plus de contrôles .. sinon, vous devez savoir sur quelle plate-forme vous vous trouvez et comment le faire.

    Je n’oserais pas essayer de mettre cela dans une réponse simple

    @Miki, pourquoi je ne peux pas utiliser mes boutons en alternance? Comment le réparer? Je veux dire que je veux les utiliser en même temps.

    EDIT: Je l’ai réparé moi-même. Pas besoin d’aide. 🙂

     #include  #include  using namespace cv; using namespace std; Mat3b canvas; ssortingng buttonText("Nacisnij guzik!"); ssortingng buttonText2("Nacisnij guzik NR2!"); ssortingng winName = "PokerGui"; int a = 0;//mozna pozniej usunac, potrzebne tylko czy button reaguje jak nalezy Rect button, button2; void callBackFunc(int event, int x, int y, int flags, void* userdata) { if (event == EVENT_LBUTTONDOWN) { if (button.contains(Point(x, y)))//ponizej to co ma sie wykonac po nacisnieciu klawisza { a = a + 7; cout << "Nacisnales guzik!\n" << endl; printf("liczba = %i\n", a); rectangle(canvas(button), button, Scalar(0, 0, 255), 2); } else if (button2.contains(Point(x, y)))//ponizej to co ma sie wykonac po nacisnieciu klawisza { //a = a + 7; cout << "Nacisnales guzik NR2!\n" << endl; //printf("liczba = %i\n", a); rectangle(canvas(button2), button, Scalar(0, 0, 255), 2); } } //if (event == EVENT_LBUTTONUP) //{ //rectangle(canvas, button, Scalar(200, 200, 200), 2); //} imshow(winName, canvas); waitKey(1); } void callBackFunc2(int event, int x, int y, int flags, void* userdata) { if (event == EVENT_LBUTTONDOWN) { if (button2.contains(Point(x, y)))//ponizej to co ma sie wykonac po nacisnieciu klawisza { //a = a + 7; cout << "Nacisnales guzik NR2!\n" << endl; //printf("liczba = %i\n", a); rectangle(canvas(button2), button, Scalar(0, 0, 255), 2); } } //if (event == EVENT_LBUTTONUP) //{ //rectangle(canvas, button, Scalar(200, 200, 200), 2); //} imshow(winName, canvas); waitKey(1); } int main() { // An image Mat3b img(300, 300, Vec3b(0, 255, 0)); // Your button button = Rect(0, 0, img.cols, 50); button2 = Rect(0, 60, img.cols, 50); // The canvas canvas = Mat3b(img.rows + button.height, img.cols, Vec3b(0, 0, 0)); // Draw the button canvas(button) = Vec3b(200, 200, 200); canvas(button2) = Vec3b(200, 200, 200); putText(canvas(button), buttonText, Point(button.width*0.35, button.height*0.7), FONT_HERSHEY_PLAIN, 1, Scalar(0, 0, 0)); putText(canvas(button2), buttonText2, Point(button.width*0.25, button.height*0.7), FONT_HERSHEY_PLAIN, 1, Scalar(0, 0, 0)); // Draw the image //img.copyTo(canvas(Rect(0, button.height, img.cols, img.rows))); // Setup callback function namedWindow(winName); setMouseCallback(winName, callBackFunc); //setMouseCallback(winName, callBackFunc2); imshow(winName, canvas); waitKey(); return 0; }