Mat convert to 1d vector
refert to this post http://feelmare.blogspot.kr/2014/01/opencv-vector-to-mat-mat-to-vector.html
This post is about 2d vector write to the XML file.
And read the XML file and data assigned to 2d vector again.
To complete this process, I use 2d vector convert to Mat and Mat convert to 2D vector.
The method to converting 2D vector, Mat is like that..
...
//2D vector to Mat
//create Mat
Mat M(row,col,CV_32F);
//copy 2d vector to mat
for(int i=0; i< row; ++i)
memcpy( &(M.data[col * i * sizeof(float) ]) ,vv_Test[i].data(),col*sizeof(float));
//Mat to 2D vector
//copy from Mat to 2d Vector
for(int i=0; i< row; ++i)
{
vector< float > temp;
int start=col * i * sizeof(float);
int end=start + col*sizeof(float)-1;
temp.assign( (float*)(&(M2.data[start])), (float*)(&(M2.data[end])) );
vv_Test2.push_back(temp);
}
---This example source is save 2d vector to XML and read xml and copy to 2D vector variable.
...
#include < stdio.h>
#include < opencv2\opencv.hpp>
//#include < opencv2\gpu\gpu.hpp>
using namespace cv;
using namespace std;
#ifdef _DEBUG
#pragma comment(lib, "opencv_core247d.lib")
#pragma comment(lib, "opencv_imgproc247d.lib") //MAT processing
#pragma comment(lib, "opencv_objdetect247d.lib") //HOGDescriptor
//#pragma comment(lib, "opencv_gpu247d.lib")
//#pragma comment(lib, "opencv_features2d247d.lib")
#pragma comment(lib, "opencv_highgui247d.lib")
//#pragma comment(lib, "opencv_ml247d.lib")
//#pragma comment(lib, "opencv_stitching247d.lib");
//#pragma comment(lib, "opencv_nonfree247d.lib");
#else
#pragma comment(lib, "opencv_core247.lib")
#pragma comment(lib, "opencv_imgproc247.lib")
#pragma comment(lib, "opencv_objdetect247.lib")
//#pragma comment(lib, "opencv_gpu247.lib")
//#pragma comment(lib, "opencv_features2d247.lib")
#pragma comment(lib, "opencv_highgui247.lib")
//#pragma comment(lib, "opencv_ml247.lib")
//#pragma comment(lib, "opencv_stitching247.lib");
//#pragma comment(lib, "opencv_nonfree247.lib");
#endif
void main()
{
/////////////////////////////////////////////////////////////
////Write xml example
//variables
vector< vector < float > > vv_Test;
int row = 5, col = 10;
//make vector values
for(int i=0; i< 5; ++i)
{
vector< float > vTest;
for(int j=0; j< 10; ++j)
vTest.push_back(i*j);
vv_Test.push_back( vTest );
}
//create xml to write
FileStorage write_hogXml("V_writeTest.xml", FileStorage::WRITE); //FileStorage::READ
//create Mat
Mat M(row,col,CV_32F);
//copy 2d vector to mat
for(int i=0; i< row; ++i)
memcpy( &(M.data[col * i * sizeof(float) ]) ,vv_Test[i].data(),col*sizeof(float));
//write xml
write(write_hogXml, "vectorTest", M);
//release
write_hogXml.release();
///////////////////////////////////////////////////////////////////////////
//read xml example
//create xml to read
FileStorage read_hogXml("V_writeTest.xml", FileStorage::READ); //FileStorage::READ
//Create Mat
int row2,col2;
//create Mat, 2d vector
Mat M2;
vector< vector < float > > vv_Test2;
//read data into Mat
read( read_hogXml["vectorTest"], M2);
row2 = M2.rows;
col2 = M2.cols;
printf("%d %d\n", row2, col2);
//read_hogXml["vectorTest"] >> M2; //same
//copy from Mat to 2d Vector
for(int i=0; i< row2; ++i)
{
vector< float > temp;
int start=col2 * i * sizeof(float);
int end=start + col2*sizeof(float)-1;
temp.assign( (float*)(&(M2.data[start])), (float*)(&(M2.data[end])) );
vv_Test2.push_back(temp);
}
//release
read_hogXml.release();
///////////////////////////////////////////////////////////////////////////////////
printf("read data confirm!! \n");
for(int i=0; i< vv_Test2.size(); ++i)
{
vector< float > vTest;
for(int j=0; j< vv_Test2[i].size(); ++j)
printf("%.0f ", vv_Test2[i][j] );
printf("\n");
}
}
---result of save XML file.
result of read XML and print 2D vector
No comments:
Post a Comment