c++ – How to make a simple window with one button using OpenCV HighGui only?


@Miki, why I cannot use my buttons alternately? How to fix it? I mean I want to use them at the same time.

EDIT: I fixed it myself. No need of help. 🙂

#include <opencv2opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;


Mat3b canvas;
string buttonText("Nacisnij guzik!");
string buttonText2("Nacisnij guzik NR2!");
string 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 = %in", 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 = %in", 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 = %in", 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;
}



Source link

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top