基于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);
}
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);
}
相关文章推荐
- 使用JavaScript 实现的人脸检测
- python结合opencv实现人脸检测与跟踪
- JavaScript人脸检测的实现方法
- BioID人脸数据库简介
- [转]浅析人脸检测之Haar分类器方法
- opencv人脸检测基础代码
- 人脸检测的两个参考网址
- 简单的基于YCrCb颜色空间的人脸检测(肤色)
- opencv人脸检测
- 利用Adaboost和LBP特征进行人脸检测
- 人脸特征点检测
- 鲁棒的实时人脸检测:Robust Real-Time Face Detection
- 浅析人脸检测之Haar分类器方法(一)
- 基于Boost方法的人脸检测(1):整体思路
- 关于人脸检测与识别的API、库和软件
- OpenCv 人脸检测的学习
- 一个快速的人脸检测库
- OpenCV - 人脸检测(face detection) 代码
- opencv 实现人脸检测(opencv3.3 + visual studio 2017)
- OpenCV+Dlib实现人脸68个特征点检测