请教大神。基于AdaBoost算法的人脸检测。程序怎么改可以使检测后人脸区域是矩形 (现在是圆形) 20
请教大神。基于AdaBoost算法的人脸检测。程序怎么改可以使检测后人脸区域是矩形(现在是圆形)人脸检测核心源代码如下:voiddetect_and_draw(IplIm...
请教大神。基于AdaBoost算法的人脸检测。程序怎么改可以使检测后人脸区域是矩形 (现在是圆形)人脸检测核心源代码如下:
void detect_and_draw( IplImage* img )
{
static CvScalar colors[] =
{
{{0,0,255}},
{{0,128,255}},
{{0,255,255}},
{{0,255,0}},
{{255,128,0}},
{{255,255,0}},
{{255,0,0}},
{{255,0,255}}
};//用于设置表示图像中人脸的颜色,共8个颜色
double scale = 2;
IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );
IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale),
cvRound (img->height/scale)),8, 1 );
int i;
cvCvtColor( img, gray, CV_BGR2GRAY );
cvResize( gray, small_img, CV_INTER_LINEAR );
cvEqualizeHist( small_img, small_img );
cvClearMemStorage( storage );
if( cascade )
{
double t = (double)cvGetTickCount();
CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage,
1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/,
cvSize(15, 15) );
for( i = 0; i < (faces ? faces->total : 0); i++ )//标记人脸位置
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
CvPoint center;
int radius;
center.x = cvRound((r->x + r->width*0.5)*scale);
center.y = cvRound((r->y + r->height*0.5)*scale);
radius = cvRound((r->width + r->height)*0.25*scale);
cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );
}
}
cvReleaseImage( &gray );
cvReleaseImage( &small_img );
} 展开
void detect_and_draw( IplImage* img )
{
static CvScalar colors[] =
{
{{0,0,255}},
{{0,128,255}},
{{0,255,255}},
{{0,255,0}},
{{255,128,0}},
{{255,255,0}},
{{255,0,0}},
{{255,0,255}}
};//用于设置表示图像中人脸的颜色,共8个颜色
double scale = 2;
IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );
IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale),
cvRound (img->height/scale)),8, 1 );
int i;
cvCvtColor( img, gray, CV_BGR2GRAY );
cvResize( gray, small_img, CV_INTER_LINEAR );
cvEqualizeHist( small_img, small_img );
cvClearMemStorage( storage );
if( cascade )
{
double t = (double)cvGetTickCount();
CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage,
1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/,
cvSize(15, 15) );
for( i = 0; i < (faces ? faces->total : 0); i++ )//标记人脸位置
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
CvPoint center;
int radius;
center.x = cvRound((r->x + r->width*0.5)*scale);
center.y = cvRound((r->y + r->height*0.5)*scale);
radius = cvRound((r->width + r->height)*0.25*scale);
cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );
}
}
cvReleaseImage( &gray );
cvReleaseImage( &small_img );
} 展开
展开全部
目前在实际中应用的人脸检测方法多为基于 Adaboost 学习算法的方法。
Viola人脸检测方法是一种基于积分图、 级联检测器和AdaBoost 算法的方法,方法框架可以分为以下三大部分:
第一部分,使用Harr-like特征表示人脸, 使用逗 积分图地实现特征数值的快速计算;
第二部分, 使用Adaboost算法挑选出一些最能代表人脸的矩形特征( 弱分类器),按照加权投票的方式将弱分类器构造为一个强分类器;
第三部分, 将训练得到的若干强分类器串联组成一个级联结构的层叠分类器,级联结构能有效地提高分类器的检测速度。广州的颜鉴在人脸检测国际榜FDDB排名世界第三。
Adaboost 算法是一种用来分类的方法,它的基本原理就是逗三个臭皮匠,顶个诸葛亮地。它把一些比较弱的分类方法合在一起,组合出新的很强的分类方法。
Viola人脸检测方法是一种基于积分图、 级联检测器和AdaBoost 算法的方法,方法框架可以分为以下三大部分:
第一部分,使用Harr-like特征表示人脸, 使用逗 积分图地实现特征数值的快速计算;
第二部分, 使用Adaboost算法挑选出一些最能代表人脸的矩形特征( 弱分类器),按照加权投票的方式将弱分类器构造为一个强分类器;
第三部分, 将训练得到的若干强分类器串联组成一个级联结构的层叠分类器,级联结构能有效地提高分类器的检测速度。广州的颜鉴在人脸检测国际榜FDDB排名世界第三。
Adaboost 算法是一种用来分类的方法,它的基本原理就是逗三个臭皮匠,顶个诸葛亮地。它把一些比较弱的分类方法合在一起,组合出新的很强的分类方法。
像素数据
2023-07-25 广告
2023-07-25 广告
人脸识别软件有很多,以下是其中一些较为优秀的人脸识别软件:* CompreFace:CompreFace是一款十分具有前景的人脸识别产品,可以用于跟踪员工的生产力,控制对敏感数据和安全环境的访问权限,以及快速识别来访者以提供一流的客户服务。...
点击进入详情页
本回答由像素数据提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询