VISUAL C++利用OPENCV对图像进行人脸识别(傻瓜教程)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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++ ) {
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),
cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib 如果你不需要这么多 lib,你可以只添加你需要的 lib。
创建以下 win32 console application 程序进行测试。 #include <cv.h> #include <cxcore.h> #include <highgui.h> int main(int argc, char *argv[]) {
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 );
cvShowImage( "result", img ); cvReleaseImage( &gray ); cvReleaseImage( &small_img ); }
/* stdafx.h 文件完整代码*/ // stdafx.h : 标准系统包含文件的包含文件, // 或是经常使用但不常更改的 // 特定于项目的包含文件 //
#pragma once
#define WIN32_LEAN_AND_MEAN #include <stdio.h> #include <tchar.h>
// 从 Windows 头中排除极少使用的资料
// TODO: 在此处引用程序需要的其他头文件
/* stdafx.cpp 文件完整代码*/
// stdafx.cpp : 只包括标准包含文件的源文件 // FaceDetection.pch 将作为预编译头 // stdafx.obj 将包含预编译类型信息
{ cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
所用的分类器 if( !cascade ) { fprintf( stderr, "ERROR: Could not load classifier cascade\n" ); return -1; } storage = cvCreateMemStorage(0);
如果能够编译链接成功,则说明配置成功,否则检查前面的配置步骤。
开始创建工程
1, 打开 Visual C++ 6.0,创建一个“Win32 Console Application”类型的工程,工程名称取“test”, 单击“确定”,然后单击“完成”,结束应用程序创建。
2, 将…\OpenCV\data\haarcascades 目录下的数据文件 haarcascade_frontalface_alt.xml 复制 到 工 程 目 录 文 件 夹 中 。 其 中 , …\OpenCV 为 OpenCV 的 安 装 目 录 , 数 据 文 件 haarcascade_frontalface_alt.xm 为人脸检测时所用到得分类器。
利用 OpenCV 检测图像中的人脸
工程创建准备: 1. 安装 Visual C++ 6.0 或以上版本,本机安装 Visual C++ 6.0 2. 安装 OpenCV 及配置
OpenCV 1.0 在 VC6 下安装与配置
参考网站:http://www.opencv.org.cn
安装 OpenCV
载的图像进行检测 cvWaitKey(0); cvReleaseImage( &image ); cvDestroyWindow("result"); return 0;
}
//加载人脸检测
//动态 //待检测 //加载图像
//对加
void detect_and_draw( IplImage* img ) {
cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib
如果你不需要这么多 lib,你可以只添加你需要的 lib。
5, 编译工程 在编译前,将要进行人脸检测的图片放到工程目录下,图片的名称要与代码中的名称对应。 如:const char* filename = "景甜.jpg";//待检测图像(包含绝对路径) 一切准备就绪,编译并连接工程,运行生成的文件。效果如下:
3, 源程序代码如下: /*test.cpp 文件完整代码*/ #include "stdafx.h" #include "cv.h" #include "highgui.h" #include <stdio.h>
static CvHaarClassifierCห้องสมุดไป่ตู้scade* cascade = 0; static CvMemStorage* storage = 0;
下载 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,在下方填入路径:
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 ); } }
IplImage *img = cvLoadImage("lena.jpg"); cvNamedWindow("Image:", 1); cvShowImage("Image:", img); cvWaitKey(); cvDestroyWindow("Image:"); cvReleaseImage(&img); return 0; }
void detect_and_draw( IplImage* image ); const char* cascade_name ="haarcascade_frontalface_alt.xml"; 要用到的分类器
//人脸检测
int _tmain(int argc, _TCHAR* argv[])
然后选择 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”,完成设置。
#include "stdafx.h"
// TODO: 在 STDAFX.H 中 // 引用任何所需的附加头文件,而不是在此文件中引用
4, 项目配置 每创建一个将要使用 OpenCV 的 VC Project,都需要给它指定需要的 lib。菜单:Project->Settings, 然后将 Setting for 选为 All Configurations,然后选择右边的 link 标签,在 Object/library modules 附加上
存储结构,用来存储人脸在图像中的位置 cvNamedWindow( "result", 1 ); //const char* filename = "lena.jpg";
图像(包含绝对路径) const char* filename = "景甜.jpg"; IplImage* image = cvLoadImage( filename, 1 ); detect_and_draw( image );
在 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(对象/库模块)附加上
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
/*函数 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++ ) {
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),
cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib 如果你不需要这么多 lib,你可以只添加你需要的 lib。
创建以下 win32 console application 程序进行测试。 #include <cv.h> #include <cxcore.h> #include <highgui.h> int main(int argc, char *argv[]) {
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 );
cvShowImage( "result", img ); cvReleaseImage( &gray ); cvReleaseImage( &small_img ); }
/* stdafx.h 文件完整代码*/ // stdafx.h : 标准系统包含文件的包含文件, // 或是经常使用但不常更改的 // 特定于项目的包含文件 //
#pragma once
#define WIN32_LEAN_AND_MEAN #include <stdio.h> #include <tchar.h>
// 从 Windows 头中排除极少使用的资料
// TODO: 在此处引用程序需要的其他头文件
/* stdafx.cpp 文件完整代码*/
// stdafx.cpp : 只包括标准包含文件的源文件 // FaceDetection.pch 将作为预编译头 // stdafx.obj 将包含预编译类型信息
{ cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
所用的分类器 if( !cascade ) { fprintf( stderr, "ERROR: Could not load classifier cascade\n" ); return -1; } storage = cvCreateMemStorage(0);
如果能够编译链接成功,则说明配置成功,否则检查前面的配置步骤。
开始创建工程
1, 打开 Visual C++ 6.0,创建一个“Win32 Console Application”类型的工程,工程名称取“test”, 单击“确定”,然后单击“完成”,结束应用程序创建。
2, 将…\OpenCV\data\haarcascades 目录下的数据文件 haarcascade_frontalface_alt.xml 复制 到 工 程 目 录 文 件 夹 中 。 其 中 , …\OpenCV 为 OpenCV 的 安 装 目 录 , 数 据 文 件 haarcascade_frontalface_alt.xm 为人脸检测时所用到得分类器。
利用 OpenCV 检测图像中的人脸
工程创建准备: 1. 安装 Visual C++ 6.0 或以上版本,本机安装 Visual C++ 6.0 2. 安装 OpenCV 及配置
OpenCV 1.0 在 VC6 下安装与配置
参考网站:http://www.opencv.org.cn
安装 OpenCV
载的图像进行检测 cvWaitKey(0); cvReleaseImage( &image ); cvDestroyWindow("result"); return 0;
}
//加载人脸检测
//动态 //待检测 //加载图像
//对加
void detect_and_draw( IplImage* img ) {
cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib
如果你不需要这么多 lib,你可以只添加你需要的 lib。
5, 编译工程 在编译前,将要进行人脸检测的图片放到工程目录下,图片的名称要与代码中的名称对应。 如:const char* filename = "景甜.jpg";//待检测图像(包含绝对路径) 一切准备就绪,编译并连接工程,运行生成的文件。效果如下:
3, 源程序代码如下: /*test.cpp 文件完整代码*/ #include "stdafx.h" #include "cv.h" #include "highgui.h" #include <stdio.h>
static CvHaarClassifierCห้องสมุดไป่ตู้scade* cascade = 0; static CvMemStorage* storage = 0;
下载 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,在下方填入路径:
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 ); } }
IplImage *img = cvLoadImage("lena.jpg"); cvNamedWindow("Image:", 1); cvShowImage("Image:", img); cvWaitKey(); cvDestroyWindow("Image:"); cvReleaseImage(&img); return 0; }
void detect_and_draw( IplImage* image ); const char* cascade_name ="haarcascade_frontalface_alt.xml"; 要用到的分类器
//人脸检测
int _tmain(int argc, _TCHAR* argv[])
然后选择 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”,完成设置。
#include "stdafx.h"
// TODO: 在 STDAFX.H 中 // 引用任何所需的附加头文件,而不是在此文件中引用
4, 项目配置 每创建一个将要使用 OpenCV 的 VC Project,都需要给它指定需要的 lib。菜单:Project->Settings, 然后将 Setting for 选为 All Configurations,然后选择右边的 link 标签,在 Object/library modules 附加上
存储结构,用来存储人脸在图像中的位置 cvNamedWindow( "result", 1 ); //const char* filename = "lena.jpg";
图像(包含绝对路径) const char* filename = "景甜.jpg"; IplImage* image = cvLoadImage( filename, 1 ); detect_and_draw( image );
在 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(对象/库模块)附加上
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