And save descriptors to XML file.
The source code explain how to use HOGDescriptor function.
..
#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() { //variables char FullFileName[100]; char FirstFileName[100]="./images/upperbody"; char SaveHogDesFileName[100] = "Positive.xml"; int FileNum=96; vector< vector < float> > v_descriptorsValues; vector< vector < Point> > v_locations; for(int i=0; i< FileNum; ++i) { sprintf_s(FullFileName, "%s%d.png", FirstFileName, i+1); printf("%s\n", FullFileName); //read image file Mat img, img_gray; img = imread(FullFileName); //resizing resize(img, img, Size(64,48) ); //Size(64,48) ); //Size(32*2,16*2)); //Size(80,72) ); //gray cvtColor(img, img_gray, CV_RGB2GRAY); //extract feature HOGDescriptor d( Size(32,16), Size(8,8), Size(4,4), Size(4,4), 9); vector< float> descriptorsValues; vector< Point> locations; d.compute( img_gray, descriptorsValues, Size(0,0), Size(0,0), locations); //printf("descriptor number =%d\n", descriptorsValues.size() ); v_descriptorsValues.push_back( descriptorsValues ); v_locations.push_back( locations ); //show image imshow("origin", img); waitKey(5); } //refer to this address -> http://feelmare.blogspot.kr/2014/04/the-example-source-code-of-2d-vector.html //save to xml FileStorage hogXml(SaveHogDesFileName, FileStorage::WRITE); //FileStorage::READ //2d vector to Mat int row=v_descriptorsValues.size(), col=v_descriptorsValues[0].size(); printf("col=%d, row=%d\n", row, col); Mat M(row,col,CV_32F); //save Mat to XML for(int i=0; i< row; ++i) memcpy( &(M.data[col * i * sizeof(float) ]) ,v_descriptorsValues[i].data(),col*sizeof(float)); //write xml write(hogXml, "Descriptor_of_images", M); //write(hogXml, "Descriptor", v_descriptorsValues ); //write(hogXml, "locations", v_locations ); hogXml.release(); }...
same with above code.
< gist code start>
< gist code end >