1 // testopencv.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5 #include <opencv2\opencv.hpp>
6 #include <fstream>
7 #include <vector>
8 #include <string>
9 using namespace std;
10 using namespace cv;
11 void getFileName(string & filename,vector<string> &vstr)
12 {
13 cout<<"begin read file name from "<< filename<<endl;
14 string name;
15 ifstream in(filename);
16 while(!in.eof())
17 {
18 in>>name;
19 vstr.push_back(name);
20 }
21 cout<<"end read filename , the total image number is "<< vstr.size()<<endl;
22 }
23 void writeIntegral(vector<string> &vstr,string& filename)
24 {
25 cout<<"begin calculate the image integral"<<endl;
26 ofstream out(filename,ofstream::binary);
27 int num = 0;
28 vector<string>::iterator begin = vstr.begin();
29 for( ;begin != vstr.end(); begin++)
30 {
31 //第二个参数为0读进来的image都是灰度的
32 Mat img = imread(*begin,0);
33 if(img.empty())
34 {
35 cout<<"read image "<<*begin<<" failed"<<endl;
36 continue;
37 }
38 num++;
39 Mat gray_img;
40
41 CvMat sour_image=gray_img;
42 CvMat *inte_image = cvCreateMat(gray_img.rows+1,gray_img.cols+1,CV_32F);
43 cvIntegral(&sour_image,inte_image);
44
45
46 float *f = inte_image->data.fl;
47
48 out.write((char*)(f),inte_image->width*inte_image->height*sizeof(float));
49 }
50 out.close();
51 cout<<"total image:"<<vstr.size()<<" cvIntegral number:"<<num<<endl;
52 }
53 int _tmain(int argc, _TCHAR* argv[])
54 {
55 vector<string> v;
56 getFileName(string("face.txt"),v);
57 writeIntegral(v,string("face.dat"));
58 waitKey();
59 return 0;
60 }