您的位置:首页 > 其它

基于Boost方法的人脸检测(2):样本生成(切割图像、resize图像、灰度化图像、保存图片)

2016-04-30 12:51 633 查看
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息