鼠标框选roi区域c++程序
时间: 2023-10-04 10:07:10 浏览: 163
C++设置ROI区域
4星 · 用户满意度95%
以下是使用OpenCV库在C++中实现鼠标框选ROI区域的程序:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
Rect roi;
bool drawing = false;
void select_roi(int event, int x, int y, int flags, void* userdata) {
if (event == EVENT_LBUTTONDOWN) {
roi.x = x;
roi.y = y;
drawing = true;
}
else if (event == EVENT_MOUSEMOVE && drawing) {
Mat img = *(Mat*)userdata;
rectangle(img, Point(roi.x, roi.y), Point(x, y), Scalar(0, 255, 0), 2);
}
else if (event == EVENT_LBUTTONUP) {
roi.width = abs(x - roi.x);
roi.height = abs(y - roi.y);
drawing = false;
}
}
int main() {
Mat img = imread("image.jpg");
namedWindow("image");
setMouseCallback("image", select_roi, &img);
while (true) {
imshow("image", img);
if (waitKey(1) == 'q') {
break;
}
if (roi.width > 0 && roi.height > 0) {
Mat roi_img = img(roi);
// 在ROI区域上进行操作
}
}
return 0;
}
```
在这个程序中,我们首先定义了一个`Rect`类型的变量`roi`,用于存储ROI区域的坐标和大小。我们还定义了一个布尔类型的变量`drawing`,用于记录是否正在绘制矩形框。
我们使用`setMouseCallback`函数来设置鼠标事件的回调函数。在回调函数中,我们检查鼠标事件的类型,如果是鼠标左键按下,就记录下鼠标的坐标,并将`drawing`设为true。如果是鼠标移动,且`drawing`为true,就在图像上绘制矩形框。如果是鼠标左键释放,就计算出矩形框的大小,并将`drawing`设为false。
在主循环中,我们展示图像,并等待用户操作。如果用户按下了`q`键,就退出循环。如果ROI区域的大小大于0,就根据ROI区域的坐标和大小获取ROI区域图像,并在ROI区域上进行操作。
完整代码可以进行编译和运行。
阅读全文