qt使用opencv将二维数据保存为mat格式,并且要求数据部分与python的scipy.io生成的mat格式里data部分压缩方式一样
时间: 2024-05-16 15:16:43 浏览: 111
qt编译opencv
首先,需要将二维数据转换为Mat类型的对象。可以使用以下代码:
```
QVector<QVector<double>> data; // 二维数据
cv::Mat mat(data.size(), data[0].size(), CV_64FC1); // 创建一个CV_64FC1类型的Mat对象
for (int i = 0; i < data.size(); i++) {
for (int j = 0; j < data[i].size(); j++) {
mat.at<double>(i, j) = data[i][j];
}
}
```
然后,需要将Mat对象保存到文件中。可以使用以下代码:
```
cv::FileStorage fs("data.mat", cv::FileStorage::WRITE);
fs << "data" << mat;
fs.release();
```
这将在当前目录下创建一个名为“data.mat”的文件,并将Mat对象压缩保存在其中。如果需要与Python的scipy.io生成的mat格式里data部分压缩方式一样,可以在保存之前设置压缩参数,如下所示:
```
cv::FileStorage fs("data.mat", cv::FileStorage::WRITE);
fs << "data" << mat;
int compression_params[2] = {cv::IMWRITE_PNG_COMPRESSION, 9}; // 压缩参数
fs.setFormat(cv::FileStorage::FORMAT_MATLAB);
fs.setCompressionParams(compression_params);
fs.release();
```
这将使用MATLAB格式保存Mat对象,并使用PNG压缩方式。注意,这可能会导致保存的文件大小增加,但可以减少数据存储所需的空间。
阅读全文