qt使用opencv3将mat格式数据压缩并生成
时间: 2024-05-16 21:16:41 浏览: 108
opencv+QT实现图片拼接和Mat转QImage
可以使用OpenCV自带的imencode函数将Mat格式的图像数据压缩成指定格式的字节流,然后将字节流保存到文件中。
以下是一个示例代码:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("test.jpg");
vector<uchar> buf;
imencode(".jpg", img, buf);
// 将字节流保存到文件中
ofstream ofs("test_compressed.jpg", ios::binary);
ofs.write((char*)buf.data(), buf.size());
return 0;
}
```
在上面的示例代码中,我们首先使用imread函数读取了一张图像,并将其保存在Mat格式的img中。然后,我们使用imencode函数将这张图像压缩成JPEG格式的字节流,保存在vector<uchar>类型的buf中。最后,我们将buf中的数据写入文件中,生成压缩后的图像文件test_compressed.jpg。
需要注意的是,imencode函数的第一个参数是压缩格式的后缀名,可以根据需要修改为其他格式,例如".png"、".bmp"等。同时,保存文件时需要将文件流的打开模式设置为二进制模式(ios::binary),以避免在写入数据时发生意外的修改。
阅读全文