c/c++中读取和写入mat文件 --- MAT File I/O Library(二)

本篇记述c/c++中读取mat文件示例

测试数据matioTest.zip下载地址:

1. 读取matioTest.zip中s.mat文件,数据为普通matrix

 1 #include <iostream>
 2 #include <cassert>
 3 #include <matio.h>
 4 
 5 
 6 int main()
 7 {
 8     mat_t *matfp;
 9     const char* matFilePath = "testRes\\s.mat";
10     matfp = Mat_Open(matFilePath, MAT_ACC_RDONLY);
11     if (NULL == matfp) {
12         fprintf(stderr, "Error opening MAT file %s\n", matFilePath);
13         return EXIT_FAILURE;
14     }
15     matvar_t* matVar = NULL;
16     // read data ‘x‘
17     matVar = Mat_VarRead(matfp, "x");
18     if (matVar) {
19         assert(matVar->data_type == MAT_T_DOUBLE);
20         size_t xSize = matVar->nbytes / matVar->data_size;
21         const double* xData = static_cast<const double*>(matVar->data);
22         for (int i = 0; i < xSize; ++i) {
23             std::cout << xData[i] << " ";
24         }
25         std::cout << std::endl;
26         for (int i = 0; i < matVar->rank; ++i) {
27             std::cout << matVar->dims[i] << " ";
28         }
29         std::cout << std::endl;
30     }
31     // read data ‘y‘
32     matVar = Mat_VarRead(matfp, "y");
33     if (matVar) {
34         assert(matVar->data_type == MAT_T_DOUBLE);
35         size_t ySize = matVar->nbytes / matVar->data_size;
36         const double* yData = static_cast<const double*>(matVar->data);
37         for (int i = 0; i < ySize; ++i) {
38             std::cout << yData[i] << " ";
39         }
40         std::cout << std::endl;
41         for (int i = 0; i < matVar->rank; ++i) {
42             std::cout << matVar->dims[i] << " ";
43         }
44         std::cout << std::endl;
45     }
46     // read ‘minX‘ and ‘step‘ is similar
47     Mat_VarFree(matVar);
48     Mat_Close(matfp);
49     system("pause");
50     return EXIT_SUCCESS;
51 }
View Code

 

 

2. 读取matioTest.zip中image_0001.mat文件,数据为struct

 1 #include <iostream>
 2 #include <cassert>
 3 #include <matio.h>
 4 
 5 int main()
 6 {
 7     mat_t *matfp;
 8     const char* matFilePath = "testRes\\image_0001.mat";
 9     matfp = Mat_Open(matFilePath, MAT_ACC_RDONLY);
10     if (NULL == matfp) {
11         fprintf(stderr, "Error opening MAT file %s\n", matFilePath);
12         return EXIT_FAILURE;
13     }
14     matvar_t *feaSetStruct = NULL, *feaArr = NULL;
15     feaSetStruct = Mat_VarRead(matfp, "feaSet");
16     if (feaSetStruct) {
17         assert(MAT_T_STRUCT == feaSetStruct->data_type);
18         feaArr = Mat_VarGetStructFieldByName(feaSetStruct, "feaArr", 0);
19         if (feaArr) {
20             assert(MAT_T_DOUBLE == feaArr->data_type);
21             size_t Size = feaArr->nbytes / feaArr->data_size;
22             const double* Data = static_cast<const double*>(feaArr->data);
23             // print Data or copy to other memory container
24         }
25     }
26     Mat_VarFree(feaSetStruct);
27     system("pause");
28     return EXIT_SUCCESS;
29 }
View Code

 

 

 参考资料:

c/c++中读取和写入mat文件 --- MAT File I/O Library(二),古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。