opencv 正脸和侧脸检测

算法参考三篇论文:

最早的Haar特征由Papageorgiou C.等提出(《A general framework for object detection》),后来Paul Viola和Michal Jones提出利用积分图像法快速计算Haar特征的方法(《Rapid object detection using a boosted cascade of simple features》)。之后,Rainer Lienhart 和 Jochen Maydt用对角特征对Haar特征库进行了扩展(《An extended set of Haar-like features for rapid object detection》)。OpenCV的Haar分类器就是基于扩展后的特征库实现的。

 

int main(){
	const char *pstrImageName = "test.jpg";
	IplImage *pSrcImage = cvLoadImage(pstrImageName, 0);
	if(!pSrcImage){
		cout << pstrImageName << "can't load " << endl;
		return -1;
	}

	// 加载Haar特征检测分类器
	// haarcascade_frontalface_alt.xml系OpenCV自带的分类器 
	const char *pstrCascadeFileName = "D:/Program Files/OpenCv244/opencv/data/haarcascades/haarcascade_frontalface_alt.xml";
	CvHaarClassifierCascade *pHaarCascade = NULL;
	pHaarCascade = (CvHaarClassifierCascade*)cvLoad(pstrCascadeFileName);
	// 人脸识别与标记
	if (pHaarCascade != NULL)
	{		
		CvMemStorage *pcvMStorage = cvCreateMemStorage(0);

		CvSeq *pcvSeqFaces = cvHaarDetectObjects(pSrcImage, pHaarCascade, pcvMStorage);

		// 标记
		for(int i = 0; i <pcvSeqFaces->total; i++)
		{
			CvRect* r = (CvRect*)cvGetSeqElem(pcvSeqFaces, i);	
			CvPoint center;
			int radius;
			center.x = cvRound((r->x + r->width * 0.5));
			center.y = cvRound((r->y + r->height * 0.5));
			radius = cvRound((r->width + r->height) * 0.25);
			cvCircle(pSrcImage, center, radius, cvScalar(255));
		}
		cvReleaseMemStorage(&pcvMStorage);
	}
	cvNamedWindow("face detection", CV_WINDOW_AUTOSIZE);
	cvShowImage("face detection", pSrcImage);
	cvWaitKey(0);

	cvDestroyAllWindows();
	cvReleaseImage(&pSrcImage);	
}

Opencv 2.4.3以后添加了侧脸检测,要想检测侧脸只需将加载的文件改为haarcascade_profileface.xml,这个只是识别图形上朝一边的脸,如果想要识别朝另一边的脸就需要对图片进行水平翻转,再进行检测。

opencv中实现图片的翻转用

Flip:垂直,水平或即垂直又水平翻转二维数组  

void cvFlip( const CvArr* src, CvArr* dst=NULL, int flip_mode=0); 

flip_mode=-1(x、y)  0(x)  1(y)

       0  //  垂直镜像     1 //  水平镜像   -1 //两轴的翻转

 

评论 7 您还未登录,请先 登录 后发表或查看评论
相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

xiao囡囡

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值