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
```
其中,第一个参数 filename 表示保存路径;第二个参数 img 是需要保存的图片;第三个参数 params 是一个可选参数,默认值为 vector
下面是一个使用 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 类保存视频。这些函数和类广泛应用于计算机视觉和机器学习领域。