infile >> faceCount;
cout << faceCount << endl;
for (int i = 1; i <= faceCount; i++)
{
infile >> h >> w >> angle >> x >> y >> one;
//cout << h << "**" << w << "**" << angle << "**" << x << "**" << y << "**" << one << "**" << endl;
getline(infile, other);
//cout << other << "**" << endl;
if (i > 3) //do not replace this code to for, we need step over other faces' data lines
{
continue; //each image extract at most 3 faces, other faces are not well defined
}
//cut image: http://blog.csdn.net/superjimmy/article/details/6216316
IplImage* srcImg = cvCloneImage(&(IplImage)image);
w = w*1.5; h = h*1.5; //because w and h a little small
x = (x - w / 2.0) < 0 ? 0 : (x - w / 2.0);
y = (y - h / 2.0) < 0 ? 0 : (y - h / 2.0);
//cout << x << "**" << y << endl;
w = (x + w) > srcImg->width ? (srcImg->width - x) : w;
h = (y + h) > srcImg->height ? (srcImg->height - y) : h;
//cout << w << "**" << h << endl;
Rect rect(x, y, w, h);
cvSetImageROI(srcImg, rect);
IplImage* desImg = cvCreateImage(cvSize(w, h), srcImg->depth, srcImg->nChannels);
cvCopy(srcImg, desImg, 0);
cvResetImageROI(srcImg);
//cvShowImage("FaceDection", desImg); waitKey(0);
//resize: http://blog.csdn.net/chinabinlang/article/details/40984177
IplImage* resizedImg = cvCreateImage(cvSize(25, 25), IPL_DEPTH_8U, 1);
cvResize(desImg, resizedImg, CV_INTER_LINEAR);
stringstream iStr; iStr << i;
cvSaveImage(("PositiveExample/" + saveName + "_" + iStr.str() + ".jpg").c_str(), resizedImg);
//negative example generation
Rect rect2(0, (i - 1) * 25, 25, 25);
cvSetImageROI(srcImg, rect2);
desImg = cvCreateImage(cvSize(25, 25), IPL_DEPTH_8U, 1);
cvCopy(srcImg, desImg, 0);
cvResetImageROI(srcImg);
cvSaveImage(("NegativeExample/" + saveName + "_" + iStr.str() + ".jpg").c_str(), desImg);
}