VisualC++利用OpenCV对图像进行人脸识别傻瓜教程.docx
- 文档编号:23017347
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:14
- 大小:478.36KB
VisualC++利用OpenCV对图像进行人脸识别傻瓜教程.docx
《VisualC++利用OpenCV对图像进行人脸识别傻瓜教程.docx》由会员分享,可在线阅读,更多相关《VisualC++利用OpenCV对图像进行人脸识别傻瓜教程.docx(14页珍藏版)》请在冰豆网上搜索。
VisualC++利用OpenCV对图像进行人脸识别傻瓜教程
利用OpenCV检测图像中的人脸
工程创建准备:
1.安装VisualC++6.0或以上版本,本机安装VisualC++6.0
2.安装OpenCV及配置
OpenCV1.0在VC6下安装与配置
参考网站:
安装OpenCV
下载OpenCV安装程序。
假如要将OpenCV安装到C:
\ProgramFiles\OpenCV。
在安装时选择"将\OpenCV\bin加入系统变量"(Add\OpenCV\bintothesystermPATH)。
配置Windows环境变量
检查C:
\ProgramFiles\OpenCV\bin是否已经被加入到环境变量PATH,如果没有,请加入。
选择高级选项,然后选择“环境变量”,查看是否加入,如果没有则将其加入
加入后,在任务管理器里重启explorer.exe
配置VisualC++6.0
全局设置
菜单Tools(工具)->Options(选择)->Directories(目录):
先设置lib路径,选择Libraryfiles,在下方填入路径:
C:
\ProgramFiles\OpenCV\lib
然后选择includefiles,在下方填入路径:
C:
\ProgramFiles\OpenCV\cxcore\include
C:
\ProgramFiles\OpenCV\cv\include
C:
\ProgramFiles\OpenCV\cvaux\include
C:
\ProgramFiles\OpenCV\ml\include
C:
\ProgramFiles\OpenCV\otherlibs\highgui
C:
\ProgramFiles\OpenCV\otherlibs\cvcam\include
然后选择sourcefiles,在下方填入路径:
C:
\ProgramFiles\OpenCV\cv\src
C:
\ProgramFiles\OpenCV\cxcore\src
C:
\ProgramFiles\OpenCV\cvaux\src
C:
\ProgramFiles\OpenCV\otherlibs\highgui
C:
\ProgramFiles\OpenCV\otherlibs\cvcam\src\windows
最后点击“ok”,完成设置。
在VisualC++6.0下创建使用OpenCV的VCProject
正常启动VisualC++6.0,并创建project。
项目设置
每创建一个将要使用OpenCV的VCProject,都需要给它指定需要的lib。
菜单:
Project(工程)->Settings(设置),然后将Settingfor(设置)选为AllConfigurations(所有配置),然后选择右边的link(连接)标签,在Object/librarymodules(对象/库模块)附加上
cxcore.libcv.libml.libcvaux.libhighgui.libcvcam.lib
如果你不需要这么多lib,你可以只添加你需要的lib。
创建以下win32consoleapplication程序进行测试。
#include
#include
#include
intmain(intargc,char*argv[])
{
IplImage*img=cvLoadImage("lena.jpg");
cvNamedWindow("Image:
",1);
cvShowImage("Image:
",img);
cvWaitKey();
cvDestroyWindow("Image:
");
cvReleaseImage(&img);
return0;
}
如果能够编译链接成功,则说明配置成功,否则检查前面的配置步骤。
开始创建工程
1,打开VisualC++6.0,创建一个“Win32ConsoleApplication”类型的工程,工程名称取“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
staticCvHaarClassifierCascade*cascade=0;
staticCvMemStorage*storage=0;
voiddetect_and_draw(IplImage*image);
constchar*cascade_name="haarcascade_frontalface_alt.xml";//人脸检测要用到的分类器
int_tmain(intargc,_TCHAR*argv[])
{
cascade=(CvHaarClassifierCascade*)cvLoad(cascade_name,0,0,0);//加载人脸检测所用的分类器
if(!
cascade)
{
fprintf(stderr,"ERROR:
Couldnotloadclassifiercascade\n");
return-1;
}
storage=cvCreateMemStorage(0);//动态存储结构,用来存储人脸在图像中的位置
cvNamedWindow("result",1);
//constchar*filename="lena.jpg";//待检测图像(包含绝对路径)
constchar*filename="景甜.jpg";
IplImage*image=cvLoadImage(filename,1);//加载图像
detect_and_draw(image);//对加载的图像进行检测
cvWaitKey(0);
cvReleaseImage(&image);
cvDestroyWindow("result");
return0;
}
voiddetect_and_draw(IplImage*img)
{
staticCvScalarcolors[]=
{
{{0,0,255}},
{{0,128,255}},
{{0,255,255}},
{{0,255,0}},
{{255,128,0}},
{{255,255,0}},
{{255,0,0}},
{{255,0,255}}
};
doublescale=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(inti=0;i<(faces?
faces->total:
0);i++)
{
CvRect*r=(CvRect*)cvGetSeqElem(faces,i);
CvPointcenter;
intradius;
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);
}
/*stdafx.h文件完整代码*/
//stdafx.h:
标准系统包含文件的包含文件,
//或是经常使用但不常更改的
//特定于项目的包含文件
//
#pragmaonce
#defineWIN32_LEAN_AND_MEAN//从Windows头中排除极少使用的资料
#include
#include
//TODO:
在此处引用程序需要的其他头文件
/*stdafx.cpp文件完整代码*/
//stdafx.cpp:
只包括标准包含文件的源文件
//FaceDetection.pch将作为预编译头
//stdafx.obj将包含预编译类型信息
#include"stdafx.h"
//TODO:
在STDAFX.H中
//引用任何所需的附加头文件,而不是在此文件中引用
4,项目配置
每创建一个将要使用OpenCV的VCProject,都需要给它指定需要的lib。
菜单:
Project->Settings,然后将Settingfor选为AllConfigurations,然后选择右边的link标签,在Object/librarymodules附加上
cxcore.libcv.libml.libcvaux.libhighgui.libcvcam.lib
如果你不需要这么多lib,你可以只添加你需要的lib。
5,编译工程
在编译前,将要进行人脸检测的图片放到工程目录下,图片的名称要与代码中的名称对应。
如:
constchar*filename="景甜.jpg";//待检测图像(包含绝对路径)
一切准备就绪,编译并连接工程,运行生成的文件。
效果如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VisualC 利用 OpenCV 图像 进行 识别 傻瓜 教程