static CvMemStorage* storage = 0
static CvHaarClassifierCascade* cascade = 0
const char* cascade_name ="C:\\OpenCV2.0\\data\\haarcascades\\haarcascade_frontalface_alt2.xml" //分类器路径,根据实际情况写
cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 )
storage = cvCreateMemStorage(0)
IplImage *image = cvLoadImage(filenames) //读入灰度图像
CvSeq* faces = cvHaarDetectObjects( image, cascade, storage,1.1, 2, CV_HAAR_DO_CANNY_PRUNING,cvSize(30, 30) ) //人圆誉脸检测函数
int num_of_face=faces->total //这是检测到的人脸的个数
CvRect* r = (CvRect*)cvGetSeqElem( faces, i )//获取每个人脸的信息,返回类蔽腔山型是矩形。i为人脸编号,0,1,2。。。可以用循宏中环读取。
voiddetect_and_draw( IplImage* img ){
static CvScalar colors[] =
{
// 定义8种不同的颜色
{{0,0,255}},
型友 歼租戚 {{0,128,255}},
{{0,255,255}},
{{0,255,0}},
{{255,128,0}},
{{255,255,0}},
{{255,0,0}},
{{255,0,255}}
}
double scale = 1.3 // 图像缩放比例
IplImage*gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 ) // 申请灰度图的存储空间gray,大小为原始图像大小
IplImage*small_img = cvCreateImage( cvSize( cvRound (img->width/scale),
cvRound(img->height/scale)), 8, 1 ) // 申请灰度图的存储空间small_img,大小为原始图像缩放scale倍
cvCvtColor(img, gray, CV_BGR2GRAY ) // 将原始图像转换成灰度图像,保存在gray中
cvResize(gray, small_img, CV_INTER_LINEAR ) // 将灰度图缩放scale倍,保存在small_img中
cvEqualizeHist(small_img, small_img ) // 对缩小后的灰度图small_img做直方图均衡
cvClearMemStorage(storage ) // 为人脸识别分配空间
if( cascade )
{
//函数 cvHaarDetectObjects 检测图像中的目标
CvSeq*faces = cvHaarDetectObjects( small_img, cascade, storage, 1.1, 2, 0 ,
cvSize(30,30) ) // 人脸识别,将结果保存到faces中
for( int i = 0 i< (faces ? faces->total : 0) i++ )
{
// 对找到的每一个脸做如下处理:
CvRect*r = (CvRect*)cvGetSeqElem( faces, i ) // 取出脸的矩形区域,存入r
CvPointcenter
int radius
center.x= cvRound((r->x + r->width*0.5)*scale) // 计算矩形区域的中心,x坐标
center.y= cvRound((r->y + r->height*0.5)*scale) // 计算矩形区域的中心,y坐标
radius= cvRound((r->width + r->height)*0.25*scale) // 计算矩形区域的半径radius
cvCircle(img, center, radius, colors[i%8], 3, 8, 0 ) // 在原始图像上,在上面求得的中心处,以radius为半径,氏陵用colors中的颜色画圆。
}
}
cvShowImage("result", img ) // 显示画好的图片
cvReleaseImage(&gray ) // 释放开始申请的空间gray
cvReleaseImage(&small_img ) // 释放开始申请的空间small_img
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)