单张图片人脸检测
2015-04-10 14:14
204 查看
使用xml(haarcascade_frontalface_alt.xml)实现人脸检测
使用xml(haarcascade_frontalface_alt.xml)实现人脸检测
#include "stdafx.h" #include "cv.h" #include "highgui.h" #include <stdio.h> static CvHaarClassifierCascade* cascade = 0; static CvMemStorage* storage = 0; void detect_and_draw( IplImage* image ); const char* cascade_name ="haarcascade_frontalface_alt.xml"; int _tmain(int argc, _TCHAR* argv[]) { cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); //加载人脸检测所用的分类器 if( !cascade ) { fprintf( stderr, "ERROR: Could not load classifier cascade\n" ); return -1; } storage = cvCreateMemStorage(0); //动态存储结构,用来存储人脸在图像中的位置 cvNamedWindow( "result", 1 ); //const char* filename = "lena.jpg"; //待检测图像(包含绝对路径) const char* filename = "景甜.jpg"; IplImage* image = cvLoadImage( filename, 1 ); //加载图像 detect_and_draw( image ); //对加载的图像进行检测 cvWaitKey(0); cvReleaseImage( &image ); cvDestroyWindow("result"); return 0; } 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}} }; double scale = 1.3; 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 ); cvCvtColor( img, gray, CV_BGR2GRAY ); cvResize( gray, small_img, CV_INTER_LINEAR ); cvEqualizeHist( small_img, small_img ); cvClearMemStorage( storage ); if( cascade ) { /*函数cvHaarDetectObjects检测图像中的目标,由OpenCV提供。*/ CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, 1.1, 2, 0 , cvSize(30, 30) ); for( int 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 ); } } cvShowImage( "result", img ); cvReleaseImage( &gray ); cvReleaseImage( &small_img ); }
相关文章推荐
- Java使用OpenCV实现人脸识别/人眼检测/图片截取/合成/添加水印
- 图片人脸检测 (I)【sample改版 人眼检测】
- openCV——人脸检测资料汇总(附录)用PhotoShop尝试旋转图片
- OpenCV图片与视频的人脸检测
- C++开发人脸性别识别教程(10)——添加图片的人脸检测程序
- opencv3.1图片相似度对比和人脸检测裁剪
- opencv实现图片与视频中的人脸检测
- 毕业设计——人脸检测——001 图片导入MATLAB
- 在opencv3中进行图片人脸检测
- opencv3.4之静态图片检测人脸区域
- 图片人脸检测 (I)【sample改版 人眼检测】
- 基于Boost方法的人脸检测(2):样本生成(切割图像、resize图像、灰度化图像、保存图片)
- OpenCV对视频中的人脸和人眼检测(图片也可以)
- vs下opencv的人脸检测以及qt下dll的封装调用(一、opencv下的人脸检测以及图片的保存)
- OpenCV图片与视频的人脸检测
- 毕业设计——人脸检测——002 MATLAB实现提取一张图片像素点的RGB值
- OpenCV 实践程序14——图片中人脸检测
- 基于Boost方法的人脸检测(5):在一张图片中检测人脸
- opencv用图片or视频 进行人脸检测
- Python爬虫 + 人脸检测 + 颜值检测 = 知乎高颜值图片抓取