C++におけるMatタイプとCSV、xmlファイルのアクセス変換

2372 ワード

最近機械の学習の方面のプロジェクトをして、いつもマトリックスのデータを表の中で保存することに関連して、それからまた表の中のデータをプログラムの操作に読み込んで、ネット上でいくつか関連するコードを探したことがあって、Mat行列をCSVファイルの中で保存して、それからCSVファイルの中の表のデータをMatタイプのデータに読み込んで、しかし大多数のコードは比較的に複雑で、また、ここでは、現在使用されている最も簡単なMatとCSVを変換するコードを共有し、後で使用するために使用します.
1.OpencvのMatタイプをCSVファイルに保存する
void saveMat(cv::Mat inputMat,char* filename)// mat     CSV   
{
	FILE* fpt = fopen(filename,"w");
	int rows = inputMat.rows;
	int clos = inputMat.cols;
	for (int i = 0; i < rows;i++)
	{
		for(int j = 0;j(i,j));
			else
				fprintf(fpt,"%f
",inputMat.at(i,j)); } } fclose(fpt); }

2.CSVファイルをMatタイプとして読み込む
ここでは主にopencvの機械学習モジュールを用いてデータを処理する関数read_を用いた.csv()は、CvMLDataの関数で、CSVファイルを簡単に読み込むことができます.
    // returns:
    // 0 - OK
    // -1 - file can not be opened or is not correct
    int read_csv( const char* filename );
 CSV         Mat       :
CvMLData mlData;
mlData.read_csv("test.csv");//  csv  
const CvMat* A;
A=mlData.get_values();
Mat data= Mat(A,true);
   data         Mat  。
CvMLData ml.h     ,            ml.h    。        ,opencv ml   opencv2 opencv3      ,2   opencv   CvMLData ,opencv3         ,  opencv3          Data,
    TrainData::loadFromCSV(file_name, headlinecont);         ,      ml.h           。
3. xml     Mat     
                 CSV  ,            CSV       ,      CSV       ,             ,        Mat xml     CSV     。
Mat img_mat;
FileStorage fs("test.xml", FileStorage::WRITE);
fs<
FileStorage fsr("test.xml", FileStorage::READ);
Mat mat_vocabulary;
fsr["vocabulary"] >> mat_vocabulary;
fsr.release();
CSV , xml excel , , ,