閱讀286 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go IComparable&lt;&gt;,IFormattable,IEnumerable&lt;&gt;接口使用
  下一篇:go Maven詳解之聚合與繼承