OpenCV 批量roi截图c++
时间: 2023-10-18 08:18:35 浏览: 82
++代码示例:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
// 读取原始图像
Mat srcImage = imread("test.jpg");
if (srcImage.empty()) {
cout << "Could not open or find the image" << endl;
return -1;
}
// 设置ROI区域
Rect roiRect(100, 100, 200, 200); // 起点坐标为(100,100),宽度为200,高度为200
// 裁剪ROI区域
Mat roiImage = srcImage(roiRect);
// 保存ROI区域
imwrite("roi.jpg", roiImage);
return 0;
}
```
这是一个简单的示例,它读取名为“test.jpg”的原始图像,然后设置一个ROI区域,该区域的起点坐标为(100,100),宽度为200,高度为200。然后,该程序将裁剪ROI区域,将其保存为名为“roi.jpg”的新图像。可以通过修改ROI区域的坐标和大小来截取不同的图像区域。
相关问题
opencv过滤roi c++
在OpenCV中,ROI (Region of Interest) 是一个重要的功能,它允许你在图像处理过程中只对特定区域进行操作,而不是整个图片。在C++中,如果你想要使用OpenCV过滤ROI(兴趣区),可以按照以下步骤:
1. **创建 ROI 对象**:
首先,你需要加载图像并从其中选择感兴趣的区域。使用`cv::Mat::clone()`或`cv::Rect(x, y, width, height)`来获取ROI,其中(x, y)是左上角的坐标,width和height分别是宽度和高度。
```cpp
cv::Mat img = cv::imread("image.jpg");
cv::Rect roi(50, 50, 200, 200); // (x, y, width, height)
cv::Mat roi_img = img(roi);
```
2. **应用滤波器**:
使用OpenCV提供的各种滤波函数(如`cv::blur()`, `cv::Canny()`, `cv::medianBlur()`等)对ROI图像进行处理。例如,模糊处理可以用`cv::blur()`:
```cpp
cv::Mat blurred_roi;
cv::blur(roi_img, blurred_roi, cv::Size(5, 5)); // 5x5均值滤波器
```
3. **显示结果**:
处理后的ROI可以单独显示,或者将结果放回原图中的ROI位置。
```cpp
cv::imshow("Original ROI", roi_img);
cv::imshow("Filtered ROI", blurred_roi);
// 如果想将结果放回原图:
img(cv::Rect(roi.x, roi.y, roi.width, roi.height)) = blurred_roi;
cv::imshow("Image with Filtered ROI", img);
```
OpenCV实现多区域roi截图c++
要实现多区域ROI截图,可以使用OpenCV中的cv::Rect和cv::Mat函数。以下是一个简单的示例,它从图像中截取两个区域并将其保存为两个不同的图像。
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// Load image
Mat image = imread("image.jpg");
// Define two regions of interest
Rect roi1(100, 100, 200, 200); // (x, y, width, height)
Rect roi2(300, 200, 150, 150);
// Create two new Mat objects for each ROI
Mat roi_image1 = image(roi1);
Mat roi_image2 = image(roi2);
// Save the two ROI images
imwrite("roi1.jpg", roi_image1);
imwrite("roi2.jpg", roi_image2);
return 0;
}
```
在此示例中,我们首先使用imread函数加载图像。然后,我们定义两个不同的ROI区域,每个区域由一个cv::Rect对象表示。对于每个ROI,我们使用原始图像的Mat对象和cv::Rect对象来创建一个新的Mat对象。最后,我们使用imwrite函数将每个ROI保存为单独的图像文件。
阅读全文