opencv保存图片(opencv保存图片慢)

简介:

OpenCV 是计算机视觉和机器学习领域广泛使用的一个开源库。OpenCV 支持多种编程语言,如 C++、Python、Java 等。本篇文章将介绍如何使用 OpenCV 在 C++ 中保存图片。

多级标题:

一、图像保存的原理

二、使用 imwrite 函数保存图片

三、使用 VideoWriter 类保存视频

内容详细说明:

一、图像保存的原理

要保存一张图片,我们需要将其从内存中写入到磁盘中。OpenCV 提供了两种保存图片的方法:使用 imwrite 函数保存图片和使用 VideoWriter 类保存视频。

二、使用 imwrite 函数保存图片

使用 imwrite 函数保存图片是比较简单的。函数原型如下:

```cpp

bool imwrite(const string& filename, InputArray img,

const vector& params = vector());

```

其中,第一个参数 filename 表示保存路径;第二个参数 img 是需要保存的图片;第三个参数 params 是一个可选参数,默认值为 vector()。params 向函数提供额外的保存参数,如质量、编码器类型等。

下面是一个使用 imwrite 函数保存图片的例子:

```cpp

#include

#include

using namespace std;

using namespace cv;

int main() {

Mat img = imread("test.png", IMREAD_COLOR);

if (img.empty()) {

cout << "Failed to load image" << endl;

return -1;

}

bool saved = imwrite("saved_image.jpg", img);

if (saved) {

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

} else {

cout << "Failed to save image" << endl;

}

return 0;

```

首先,我们使用 imread 函数加载一张图片。如果加载失败,我们输出错误信息并退出程序。然后,我们调用 imwrite 函数将图片保存到磁盘。保存成功后,我们输出保存成功信息。

三、使用 VideoWriter 类保存视频

如果我们需要保存视频,可以使用 VideoWriter 类。类原型如下:

```cpp

class CV_EXPORTS_W VideoWriter

public:

// Constructors

VideoWriter();

VideoWriter(const String& filename, int fourcc, double fps,

Size frameSize, bool isColor = true);

// Member functions

bool open(const String& filename, int fourcc, double fps,

Size frameSize, bool isColor = true);

void write(InputArray image);

void release();

bool isOpened() const;

// Setter/Getter functions

void set(int propId, double value);

double get(int propId) const;

};

```

其中,第一个参数 filename 表示保存路径;第二个参数 fourcc 表示编码器类型;第三个参数 fps 表示帧率;第四个参数 frameSize 表示帧大小;第五个参数 isColor 表示是否保存彩色视频。

下面是一个使用 VideoWriter 类保存视频的例子:

```cpp

#include

#include

using namespace std;

using namespace cv;

int main() {

// create a VideoCapture object to read a video

VideoCapture cap("test.mp4");

if (!cap.isOpened()) {

cout << "Failed to open video file" << endl;

return -1;

}

// create a VideoWriter object to save a video

VideoWriter writer("saved_video.avi", cap.get(CAP_PROP_FOURCC), cap.get(CAP_PROP_FPS),

Size(cap.get(CAP_PROP_FRAME_WIDTH), cap.get(CAP_PROP_FRAME_HEIGHT)), true);

if (!writer.isOpened()) {

cout << "Failed to create video file" << endl;

return -1;

}

// read frames from the video and save them

Mat frame;

while (cap.read(frame)) {

writer.write(frame);

}

// release resources

cap.release();

writer.release();

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

return 0;

```

首先,我们使用 VideoCapture 类读取一个视频。如果打开失败,我们输出错误信息并退出程序。然后,我们使用 VideoWriter 类创建一个视频文件。创建失败时,我们输出错误信息并退出程序。接着,我们从视频中读取每一帧并将其保存到视频文件中。最后,我们释放资源并输出保存成功信息。

结论:

本文介绍了如何使用 OpenCV 在 C++ 中保存图片。我们可以使用 imwrite 函数保存单张图片,也可以使用 VideoWriter 类保存视频。这些函数和类广泛应用于计算机视觉和机器学习领域。

标签列表