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