利用OpenCV检测图像中的人脸
工程创建准备:
1. 安装Visual C++ 6.0或以上版本,本机安装Visual C++ 6.0
2. 安装OpenCV及配置
OpenCV 1.0在VC6下安装与配置 参考网站:http://www.opencv.org.cn 安装OpenCV
下载OpenCV安装程序。假如要将OpenCV安装到C:\\Program Files\\OpenCV。在安装时选择\"将\\OpenCV\\bin加入系统变量\"(Add\\OpenCV\\bin to the systerm PATH)。
配置Windows环境变量
检查C:\\Program Files\\OpenCV\\bin是否已经被加入到环境变量PATH,如果没有,请加入。
选择高级选项,然后选择“环境变量”,查看是否加入,如果没有则将其加入
加入后,在任务管理器里重启explorer.exe
配置Visual C++ 6.0
全局设置
菜单Tools(工具)->Options(选择)->Directories(目录):先设置lib路径,选择Library files,在下方填入路径:
C:\\Program Files\\OpenCV\\lib
然后选择include files,在下方填入路径:
C:\\Program Files\\OpenCV\\cxcore\\include
C:\\Program Files\\OpenCV\\cv\\include
C:\\Program Files\\OpenCV\\cvaux\\include
C:\\Program Files\\OpenCV\\ml\\include
C:\\Program Files\\OpenCV\\otherlibs\\highgui
C:\\Program Files\\OpenCV\\otherlibs\\cvcam\\include
然后选择source files,在下方填入路径:
C:\\Program Files\\OpenCV\\cv\\src
C:\\Program Files\\OpenCV\\cxcore\\src
C:\\Program Files\\OpenCV\\cvaux\\src
C:\\Program Files\\OpenCV\\otherlibs\\highgui
C:\\Program Files\\OpenCV\\otherlibs\\cvcam\\src\\windows
最后点击“ok”,完成设置。
在Visual C++ 6.0下创建使用OpenCV的VC Project
正常启动Visual C++ 6.0,并创建project。
项目设置
每创建一个将要使用OpenCV的VC Project,都需要给它指定需要的lib。菜单:Project(工程)->Settings(设置),然后将Setting for(设置)选为All Configurations(所有配置),然后选择右边的link(连接)标签,在Object/library modules(对象/库模块)附加上
cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib
如果你不需要这么多lib,你可以只添加你需要的lib。
创建以下win32 console application程序进行测试。
#include #include #include int main(int argc, char *argv[]) { IplImage *img = cvLoadImage(\"lena.jpg\"); cvNamedWindow(\"Image:\ cvShowImage(\"Image:\ cvWaitKey(); cvDestroyWindow(\"Image:\"); cvReleaseImage(&img); return 0; } 如果能够编译链接成功,则说明配置成功,否则检查前面的配置步骤。 开始创建工程 1, 打开Visual C++ 6.0,创建一个“Win32 Console Application”类型的工程,工程名称取“test”,单击“确定”,然后单击“完成”,结束应用程序创建。 2, 将…\\OpenCV\\data\\haarcascades目录下的数据文件 haarcascade_frontalface_alt.xml复制到工程目录文件夹中。其中,…\\OpenCV为OpenCV的安装目录,数据文件haarcascade_frontalface_alt.xm为人脸检测时所用到得 分类器。 3, 源程序代码如下: /*test.cpp文件完整代码*/ #include \"stdafx.h\" #include \"cv.h\" #include \"highgui.h\" #include 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\ //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\ cvReleaseImage( &gray ); cvReleaseImage( &small_img ); } /* stdafx.h文件完整代码*/ // stdafx.h : 标准系统包含文件的包含文件, // 或是经常使用但不常更改的 // 特定于项目的包含文件 // #pragma once #define WIN32_LEAN_AND_MEAN 资料 // 从 Windows 头中排除极少使用的 #include #include // TODO: 在此处引用程序需要的其他头文件 /* stdafx.cpp文件完整代码*/ // stdafx.cpp : 只包括标准包含文件的源文件 // FaceDetection.pch 将作为预编译头 // stdafx.obj 将包含预编译类型信息 #include \"stdafx.h\" // TODO: 在 STDAFX.H 中 // 引用任何所需的附加头文件,而不是在此文件中引用 4, 项目配置 每创建一个将要使用OpenCV的VC Project,都需要给它指定需要的lib。菜单:Project->Settings,然后将Setting for选为All Configurations,然后选择右边的link标签,在Object/library modules附加上 cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib 如果你不需要这么多lib,你可以只添加你需要的lib。 5, 编译工程 在编译前,将要进行人脸检测的图片放到工程目录下,图片的名称要与代码中的名称对应。如:const char* filename = \"景甜.jpg\";//待检测图像(包含绝对路径) 一切准备就绪,编译并连接工程,运行生成的文件。效果如下: 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- dcrkj.com 版权所有 赣ICP备2024042791号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务