官方文档链接:https://dovyski.github.io/cvui/components/iarea/
iarea
cvui::iarea() 创建一个报告鼠标光标活动的交互区域。函数声明如下:
int iarea(int theX, int theY, int theWidth, int theHeight);
theX 是 X 坐标,theY 是 Y 坐标,theWidth 是交互区域的宽度,theHeight 是交互区域的高度。
cvui::iarea() 返回在定义边界内的跟踪交互。返回结果为:
- cvui::OUT: 当鼠标光标不在 iarea 上
- cvui::OVER: 当鼠标光标在 iarea 上
- cvui::DOWN: 当鼠标光标在 iarea 上点击但没有释放
- cvui::CLICK: 当鼠标光标在 iarea 上点击并且释放时
重要:cvui::iarea() 不会再屏幕上生成任何视觉输出。它时用来作为创建交互的辅助工具。
下面是展示交互区域以及鼠标光标交互的示例。
核心语句:
int status = cvui::iarea(30, 50, 90, 90);
cvui::rect(frame, 30, 50, 90, 90, 0xffffff, 0xff000000);
switch (status)
{
case cvui::CLICK:
std::cout << "Clicked!" << std::endl; break;
case cvui::DOWN:
cvui::printf(frame, 150, 60, "Mouse is: DOWN"); break;
case cvui::OVER:
cvui::printf(frame, 150, 60, "Mouse is: OVER"); break;
case cvui::OUT:
cvui::printf(frame, 150, 60, "Mouse is: OUT"); break;
default: break;
}
完整代码:
#define CVUI_IMPLEMENTATION
#define CVUI_DISABLE_COMPILATION_NOTICES
#include "cvui.h"
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#define WINDOW_NAME "CVUI Test"
int main(int argc, char** argv)
{
cvui::init(WINDOW_NAME);
cv::Mat frame = cv::Mat(cv::Size(500, 200), CV_8UC3);
while (true)
{
int status = cvui::iarea(30, 50, 90, 90);
frame = cv::Scalar(100, 100, 100);
cvui::rect(frame, 30, 50, 90, 90, 0xffffff, 0xff000000);
switch (status)
{
case cvui::CLICK:
std::cout << "Clicked!" << std::endl; break;
case cvui::DOWN:
cvui::printf(frame, 150, 60, "Mouse is: DOWN"); break;
case cvui::OVER:
cvui::printf(frame, 150, 60, "Mouse is: OVER"); break;
case cvui::OUT:
cvui::printf(frame, 150, 60, "Mouse is: OUT"); break;
default: break;
}
cvui::imshow(WINDOW_NAME, frame);
if (cv::waitKey(20) == 27)
break;
}
return 0;
}
输出结果: