qt使用opencv3将mat格式压缩成python的scipy.io生成的mat的格式
时间: 2024-05-13 14:17:29 浏览: 87
首先,将 OpenCV 中的 Mat 转换为 NumPy 数组:
```python
import numpy as np
import cv2
# 读取图像
img = cv2.imread('example.jpg')
# 将 OpenCV 中的 Mat 转换为 NumPy 数组
img_np = np.array(img)
```
然后,使用 SciPy 库中的 `scipy.io.savemat()` 函数将 NumPy 数组保存为 mat 文件:
```python
from scipy.io import savemat
# 保存 NumPy 数组为 mat 文件
savemat('example.mat', {'img': img_np})
```
这里将 NumPy 数组保存为名为 `example.mat` 的 mat 文件,并将其命名为 `img`。你可以根据需要更改这些名称。
相关问题
qt使用opencv将mat数据保存为python的scipy.io.savemat的格式
可以使用OpenCV和SciPy中的函数来实现将Mat数据保存为Python的Scipy.io.savemat格式。下面是一个简单的示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <cstdlib>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <boost/filesystem.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/algorithm/string.hpp>
#include "json.hpp"
using namespace std;
using namespace cv;
namespace pt = boost::property_tree;
using json = nlohmann::json;
int main(int argc, char** argv) {
// 读取Mat数据
Mat img = imread("test.jpg");
// 将Mat数据转换为数组形式
vector<int> img_data;
for(int i=0;i<img.rows;i++) {
for(int j=0;j<img.cols;j++) {
Vec3b pixel = img.at<Vec3b>(i, j);
img_data.push_back(pixel[0]);
img_data.push_back(pixel[1]);
img_data.push_back(pixel[2]);
}
}
// 定义保存数据的json对象
json data;
data["img"] = img_data;
// 将json对象保存为文件
ofstream out_file("test.mat");
out_file << data;
out_file.close();
return 0;
}
```
这个示例程序将OpenCV读取的图像数据转换为一个vector<int>形式的数组,然后将这个数组保存到一个json对象中,最后使用ofstream将这个json对象保存到文件中。由于Scipy.io.savemat格式也是以JSON格式保存数据的,所以这个程序可以将Mat数据保存为Scipy.io.savemat格式。
qt使用opencv将二维数据保存为mat格式,并且要求数据部分与python的scipy.io生成的mat格式里data部分压缩方式一样
在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`函数用于将数据部分写入文件。
阅读全文