CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage,1.1, 2, 0,cvSize(100, 60) /*级联分类器训练中采用的检测目标的尺寸*/);//检测人脸返回矩形人脸
/*使用针对某目标物体训练的级联分类器在图像中找到包含目标物体的矩形区域,并且将这些区域作为一序列的矩形框返回。
函数以不同比例大小的扫描窗口对图像进行几次搜索(察看cvSetImagesForHaarClassifierCascade)。
每次都要对图像中的这些重叠区域利用cvRunHaarClassifierCascade进行检测。*/
//t = (double)cvGetTickCount() - t;
//printf( "detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.) );
for( i = 0; i < (faces ? faces->total : 0); i++ )//找到矩形中心把矩形转换成圆形
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );/*直接访问序列中的元素 */
CvPoint center;//OpenCV的基本数据类型之一,表示一个坐标为整数的二维点
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);//对一个double型的数进行四舍五入,并返回一个整型数!
cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );/*绘制圆形*/
*****************printf("检测到人脸!");********************************
//在此加入人脸识别程序
}
不出意外的话朋友你的代码里面应该有此部分内容吧,要判断检测到人脸的话就是在将矩形人脸标记转换成圆形标记的部分哦。
意思就是说有人脸被标记出来了,那么肯定就存在人脸了哦!
}
提问者评价
-
起初就是不知道在哪