21xrx.com
2024-12-22 15:56:16 Sunday
登录
文章检索 我的文章 写文章
OpenCV 文件写入函数使用指南
2024-05-11 21:46:03 深夜i     --     --
OpenCV 文件 写入函数 使用指南

OpenCV是一个开源的计算机视觉库,提供了许多图像处理和计算机视觉算法。它支持将图像从文件中读取到内存中进行处理,并且也提供了将图像数据写入文件的功能。本文将为您介绍OpenCV中的文件写入函数的使用指南。

在OpenCV中,可以使用imwrite函数将图像数据写入文件。函数的原型如下:


bool imwrite(const String& filename, InputArray img, const std::vector<int>& params = std::vector<int>());

参数说明:

- `filename`:表示要保存的文件的路径和名称。文件后缀名决定了保存的图像格式,可以保存为常见的JPEG、PNG、BMP等格式。

- `img`:表示要保存的图像。该图像可以是一个Mat对象,也可以是一个图像序列(例如VideoWriter类)。

- `params`:表示保存图像的可选参数。这里可以设置图像的压缩质量、颜色空间、文件格式等。

接下来,我们将结合一些示例来说明如何使用imwrite函数。

### 示例1:保存图片

假设我们有一张名为"input.jpg"的图片,我们希望将其保存为"output.jpg"。以下是保存图片的代码:


#include <opencv2/opencv.hpp>

int main() {

  cv::Mat image = cv::imread("input.jpg");

  if (image.empty())

    std::cout << "Could not open or find the image" << std::endl;

    return -1;

  

  bool success = cv::imwrite("output.jpg", image);

  if (!success)

    std::cout << "Failed to save the image" << std::endl;

    return -1;

  

  std::cout << "Image saved successfully" << std::endl;

  return 0;

}

在这个示例中,我们首先使用imread函数读取了一张图片到内存中。然后,我们使用imwrite函数将图片保存为"output.jpg"。函数返回一个布尔值,表示文件是否保存成功。

### 示例2:调整保存的图像质量

有时候,我们可能希望控制保存图像的质量。这可以通过params参数来实现。以下是一个示例:


#include <opencv2/opencv.hpp>

int main() {

  cv::Mat image = cv::imread("input.jpg");

  if (image.empty())

    std::cout << "Could not open or find the image" << std::endl;

    return -1;

  

  std::vector<int> compression_params;

  compression_params.push_back(cv::IMWRITE_JPEG_QUALITY);

  compression_params.push_back(90);

  bool success = cv::imwrite("output.jpg", image, compression_params);

  if (!success)

    std::cout << "Failed to save the image" << std::endl;

    return -1;

  

  std::cout << "Image saved successfully" << std::endl;

  return 0;

}

在这个示例中,我们使用了一个名为`compression_params`的`std::vector `变量来设置图像的压缩质量。我们使用了`IMWRITE_JPEG_QUALITY`常量来指定我们要调整的参数是JPEG图像的质量,然后将90作为参数值添加到`compression_params`中。在调用imwrite函数时,我们将compression_params作为第三个参数传入,表示保存图像时使用这些参数。

通过调整这个参数,我们可以控制保存的图像质量,值为0表示最低质量,值为100表示最高质量。默认值为95。

### 示例3:保存视频序列

除了保存单个图像,OpenCV还允许您保存视频序列。以下是保存视频序列的示例:


#include <opencv2/opencv.hpp>

int main() {

  cv::VideoCapture video("input.mp4");

  if (!video.isOpened())

    std::cout << "Could not open or find the video file" << std::endl;

    return -1;

  

  int frame_width = video.get(cv::CAP_PROP_FRAME_WIDTH);

  int frame_height = video.get(cv::CAP_PROP_FRAME_HEIGHT);

  cv::VideoWriter output("output.mp4", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 10, cv::Size(frame_width, frame_height));

  if (!output.isOpened())

    std::cout << "Failed to create output video file" << std::endl;

    return -1;

  

  cv::Mat frame;

  while (true) {

    video >> frame;

    if (frame.empty())

      break;

    

    output.write(frame);

  }

  std::cout << "Video saved successfully" << std::endl;

  return 0;

}

在这个示例中,我们使用了VideoCapture类来读取视频文件。然后,我们使用VideoWriter类创建了一个输出文件,设置了视频编解码器(使用了MJPEG编码器)和帧速率为10帧/秒。然后,我们循环读取输入视频的每一帧,并将每一帧写入到输出视频文件中。

通过以上示例,您现在应该对OpenCV中的文件写入函数有了基本的了解。您可以使用这些函数将图像和视频保存到文件中。根据实际需求,您还可以调整图像质量、视频编码器和帧速率等参数。希望这篇文章对您有所帮助!

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复