如何仅使用OpenCV HighGui制作一个带有一个按钮的简单窗口? [英] How to make a simple window with one button using OpenCV HighGui only?

查看:249
本文介绍了如何仅使用OpenCV HighGui制作一个带有一个按钮的简单窗口?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用OpenCV进行游戏项目.现在,我必须制作一个简单的GUI:一个带有一个按钮的窗口,仅使用HighGui.

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 to use something like this:

cvNamedWindow( "NameWindow" , CV_WINDOW_AUTOSIZE);

非常感谢您的帮助.

推荐答案

OpenCV不提供按钮,但是您可以轻松使用彩色矩形,并检查图像上的单击点是否为在这个矩形内.

OpenCV does not provide a button, but you can easily use a colored rectangle, and check if the clicked point on the image is inside this rectangle.

请记住,OpenCV HighGui非常简单,仅用于调试目的.您可能想将功能齐全的图形库用作Qt或类似的库.

Remember that OpenCV HighGui is very simple and is meant only for debugging purposes. You may want to use a full featured graphic library as Qt, or similar.

但是,这是一个小示例,显示一个(绿色)图像,并在顶部显示一个按钮:

However, this is a small example that shows a (green) image, and a button on top:

单击该按钮将在标准输出上打印"Clicked":

Clicking the button will print "Clicked" on stdout:

代码:

#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;


Mat3b canvas;
string buttonText("Click me!");
string 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;
}

这篇关于如何仅使用OpenCV HighGui制作一个带有一个按钮的简单窗口?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆