C++ opencv 给出框,在原图框中的图像截取保存
时间: 2024-09-07 10:05:20 浏览: 31
在C++中,使用OpenCV库可以方便地处理图像并进行区域裁剪。如果你想从一张图片中给出一个框,并截取该框内的内容,你可以按照以下步骤操作:
1. 首先,你需要加载原始图像(Input Image),通常通过`cv::imread()`函数读取。
```cpp
cv::Mat inputImage = cv::imread("input.jpg", cv::IMREAD_COLOR);
if (inputImage.empty()) {
std::cerr << "Failed to load image" << std::endl;
return;
}
```
2. 定义一个矩形框(Rect object),表示你想要截取的区域。例如,假设你想从坐标(x, y)开始,宽度w,高度h的区域内截图,可以这样做:
```cpp
cv::Rect roi(x, y, w, h);
```
3. 使用`cv::Mat`的复制构造函数或者`copyTo()`方法来创建一个新的矩阵,只包含指定区域的内容:
```cpp
cv::Mat croppedImage(inputImage, roi);
```
或者
```cpp
cv::Mat croppedImage;
inputImage(roi).copyTo(croppedImage);
```
4. 最后,你可以将这个裁剪后的图像保存到磁盘上,使用`cv::imwrite()`函数:
```cpp
cv::imwrite("cropped_image.jpg", croppedImage);
```
完整的代码示例:
```cpp
#include <opencv2/opencv.hpp>
int main() {
cv::Mat inputImage = cv::imread("input.jpg");
if (inputImage.empty()) {
return -1;
}
int x = 50, y = 100, w = 200, h = 150; // 盒子的左上角坐标和大小
cv::Rect roi(x, y, w, h);
cv::Mat croppedImage;
inputImage(roi).copyTo(croppedImage);
cv::imwrite("cropped_image.jpg", croppedImage);
return 0;
}
```
阅读全文