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);
	
	... ...
}





你可能感兴趣的:(IplImg 和 Mat 版本的 facedetect 大对比)