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