gpt4 book ai didi

c++ - 如何仅使用 OpenCV HighGui 制作一个简单的一键式窗口?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:51 27 4
gpt4 key购买 nike

我正在使用 OpenCV 开发一个游戏项目。现在我必须制作一个简单的 GUI:一个只有一个按钮的窗口,仅使用 HighGui。

我不确定,但我想我应该使用这样的东西:

cvNamedWindow( "NameWindow" , CV_WINDOW_AUTOSIZE);

非常感谢任何帮助。

最佳答案

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

请记住,OpenCV HighGui 非常简单,仅用于调试目的。您可能希望使用功能齐全的图形库,如 Qt 或类似库。

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

enter image description here

单击按钮将在标准输出上打印“已单击”:

enter image description here

代码:

#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;
}

关于c++ - 如何仅使用 OpenCV HighGui 制作一个简单的一键式窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33937800/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com