286
技术社区[云栖]
IplImg 和 Mat 版本的 facedetect 大对比
前天老板突然把原来2个月的项目压缩到2个星期(PS:要不要差距这么大),
本来计划的比较完善的暑假计划看来要搁置一段时间了,不能刷题了,不能看视频了,不能。。。
万一马上的这个学期可以打比赛但是缺少训练怎么办。。。。。。。。。。。。。不知道。。。
【不同一 分类器的加载】
IplImg版本:
static CvMemStorage* storage = 0;
static CvHaarClassifierCascade* cascade = 0;
const char* cascade_name = NULL;
int main()
{
... ...
//初始化分类器
cascade_name = "E:/Project/faceDetect/faceDetect/haarcascade_frontalface_alt2.xml";
//加载分类器
cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
//如果分类器没有正常加载,报错
if( !cascade )
{
fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
return -1;
}
storage = cvCreateMemStorage(0);
... ...
}
Mat版本:
String cascadeName = "./haarcascades/haarcascade_frontalface_alt2.xml";//人脸的训练数据
String nestedCascadeName = "./haarcascades/haarcascade_eye.xml";//人眼的训练数据
int main()
{
... ...
CascadeClassifier cascade, nestedCascade;//创建级联分类器对象
//从指定的文件目录中加载级联分类器
if( !cascade.load( cascadeName ) )
{
cerr << "ERROR: Could not load classifier cascade" << endl;
return 0;
}
//如果分类器没有正常加载,报错
if( !nestedCascade.load( nestedCascadeName ) )
{
cerr << "WARNING: Could not load classifier cascade for nested objects" << endl;
return 0;
}
... ...
}
【不同二 调用detectAndDraw】
IplImg版本:
int main()
{
... ...
//将原图片转成iplimg型
IplImage * src=&(IplImage)frame;
//原型cvSetImageROI(src , cvRect(x,y,width,height));
cvSetImageROI(src,cvRect(a,b,c,d));
IplImage * dst = cvCreateImage(cvSize(c,d),
src->depth,
src->nChannels);
cvCopy(src,dst,0);
cvResetImageROI(src);
detect_and_draw(dst);
//释放显示分配空间的dst
cvReleaseImage(&dst);
... ...
}
Mat版本:
int main()
{
... ...
//得到要识别的矩形框
Rect r=Rect(a,b,c,d);
//截取frame中的r矩形框大小
Mat src=frame(r);
detectAndDraw(src,cascade, nestedCascade,1.3);
... ...
}
最后更新:2017-04-03 05:39:47