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

前端 未结 4 1537
日久生厌
日久生厌 2021-01-12 06:25

I am working on a game-project using OpenCV. Now I have to make a simple GUI: a window with one button, using HighGui only.

I\'m not sure but I think I\'m supposed t

4条回答
  •  庸人自扰
    2021-01-12 07:14

    @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 
    #include 
    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 = %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;
    }
    

提交回复
热议问题