qt使用opencv将二维数据保存为mat格式,并且要求数据部分与python的scipy.io生成的mat格式里data部分压缩方式一样
时间: 2024-05-12 18:14:36 浏览: 106
QT调用python,并给python传递Mat矩阵和二维数组
在Qt中使用OpenCV保存二维数据为Mat格式,可以使用以下代码:
```cpp
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
Mat saveDataAsMat(double* data, int rows, int cols)
{
Mat mat(rows, cols, CV_64F, data);
return mat;
}
int main()
{
// 二维数据
double data[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
// 保存为Mat格式
Mat mat = saveDataAsMat(&data[0][0], 3, 4);
// 保存为文件
FileStorage fs("data.mat", FileStorage::WRITE);
fs << "data" << mat;
fs.release();
return 0;
}
```
其中`saveDataAsMat`函数将二维数据转换为`cv::Mat`格式,`FileStorage`类用于将`cv::Mat`格式保存为文件。
要求保存的数据部分与Python的scipy.io生成的mat格式里data部分压缩方式一样,可以使用以下代码:
```cpp
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ml/ml.hpp>
using namespace cv;
Mat saveDataAsMat(double* data, int rows, int cols)
{
Mat mat(rows, cols, CV_64F, data);
return mat;
}
int main()
{
// 二维数据
double data[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
// 保存为Mat格式
Mat mat = saveDataAsMat(&data[0][0], 3, 4);
// 压缩方式
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PXM_BINARY);
compression_params.push_back(1);
// 保存为文件
FileStorage fs("data.mat", FileStorage::WRITE);
fs << "data" << "{";
write(fs, "compressed", mat, compression_params);
fs << "}";
fs.release();
return 0;
}
```
其中`compression_params`向量用于指定压缩方式,`write`函数用于将数据部分写入文件。
阅读全文