OpenCV的人脸检测主要是调用训练好的cascade(Haar分类器)来进行模式匹配。
1. 新建项目
启动Code::Blocks,选择File->New->Project, 项目类型选择:Console Application,项目名为:MyFace,其他按默认选择。
2. 代码
打开main.cpp文件,输入以下代码:
#include <iostream>
using namespace std;
#include <videoInput.h>
#include <opencv2/opencv.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>
static CvMemStorage* storage = 0;
static CvHaarClassifierCascade* cascade = 0;
void detect_and_draw(IplImage* image);
const char* cascade_name = "haarcascade_frontalface_alt.xml";
int main(int argc, char** argv)
{
int width = 640;
int height = 400;
videoInput video;//创建视频捕获对象
video.setupDevice(0, width, height);//配置设备
//video.showSettingsWindow(0);//该语句可以显示视频设置窗口,可以去掉
IplImage* frame, *frame_copy = 0;
int optlen = strlen("--cascade=");
const char* input_name;
if(argc > 1 && strncmp(argv[1], "--cascade=", optlen) == 0)
{
cascade_name = argv[1] + optlen;
input_name = argc > 2 ? argv[2] : 0;
}
else
{
input_name = argc > 1 ? argv[1] : 0;
}
cascade = (CvHaarClassifierCascade*) cvLoad(cascade_name, 0, 0, 0);
if(!cascade)
{
fprintf(stderr, "ERROR: Could not load classifier cascade\n");
fprintf(stderr, "Usage: myface --cascade=\"<cascade_path>\" [filename]\n");
return -1;
}
storage = cvCreateMemStorage(0);
cvNamedWindow("result", 1);
frame = cvCreateImage(cvSize(width,height), IPL_DEPTH_8U, 3);
for(;;)
{
if(video.isFrameNew(0))
{
video.getPixels(0, (unsigned char *)frame->imageData, false, true);//获取一帧
}
if(!frame)
break;
if(!frame_copy)
frame_copy = cvCreateImage(cvSize(frame->width, frame->height), IPL_DEPTH_8U, frame->nChannels);
if(frame->origin == IPL_ORIGIN_TL)
cvCopy(frame, frame_copy, 0);
else
cvFlip(frame, frame_copy, 0);
detect_and_draw(frame_copy);
if(cvWaitKey(10) >= 0)
break;
}
cvReleaseImage(&frame_copy);
cvReleaseImage(&frame);
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 );
int i;
cvCvtColor( img, gray, CV_BGR2GRAY );
cvResize( gray, small_img, CV_INTER_LINEAR );
cvEqualizeHist( small_img, small_img );
cvClearMemStorage( storage );
if( cascade )
{
double t = (double)cvGetTickCount();
CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage,
1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/,
cvSize(30, 30) );
t = (double)cvGetTickCount() - t;
printf( "detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.) );
for( 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 );
}
3. 设置
打开Project-〉Build Options选项卡
选择Search directories,在Compiler里Add进以下目录:
C:\OpenCV2.2\include
C:\OpenCV2.2\3rdparty\include
在Linker里Add进以下目录:
C:\OpenCV2.2\lib
C:\OpenCV2.2\3rdparty\lib
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib
选择Linker settings,添加以下文件:
C:\OpenCV2.2\lib 此目录下的所有文件
C:\OpenCV2.2\3rdparty\lib 此目录下的所有文件
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib 此目录下所有ole开头的文件
4. 编译
点击Build->Build编译项目。
5. 运行
将C:\OpenCV2.2\data\haarcascades目录下的haarcascade_frontalface_alt.xml复制到MyFace项目根目录下。
或者打开Project-〉Set programs‘ arguments,在Program arguments里输入haarcascade_frontalface_alt.xml的全路径地址。
点击Build-〉Run
第一次运行的时候会出现一个摄像头选择界面,点确定后就可以看到视频,如果有人脸进入画面,将被标示出来。

分享到:
相关推荐
Learning OpenCV 3: Computer Vision in C++ with the OpenCV Library 是一本由浅入深介绍Opencv3 计算机视觉库使用的专业书籍。书中详细介绍了opencv3安装及各个模块的使用,此书在旧版基本上做了大量修改,以适应...
在Android平台上,结合OpenCV库,我们可以实现对RTSP视频流的实时人脸检测功能。以下是对这个主题的详细阐述: 一、VLC for Android VLC是由VideoLAN开发的多媒体播放器,其Android版本允许用户播放本地和网络上的...
OpenCV3可以与摄像头结合,实现实时人脸检测。只需将读取图像的部分替换为捕获视频帧,如: ```python cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() # 然后按照上面的流程进行人脸检测和显示 `...
《OpenCV在VC++中的应用:视频入侵检测与预警系统》 OpenCV(开源计算机视觉库)是一个强大的工具,广泛应用于图像处理、机器学习和计算机视觉领域。在本项目中,我们将探讨如何利用OpenCV结合VC++编程环境,构建一...
OpenCV实时人脸检测系统是一种利用计算机视觉技术在视频流中实时定位和识别面部的技术。OpenCV(开源计算机视觉库)是实现这一功能的核心工具,它提供了丰富的图像处理和机器学习算法,使得开发者能够构建高效的人脸...
Haar级联分类器预先训练好的XML文件包含了大量的人脸特征,可以在实时视频流中快速检测出人脸。 在Android应用中集成OpenCV通常包括以下几个步骤: 1. 配置环境:安装Android Studio,设置NDK路径,添加OpenCV库到...
在本项目中,我们将探讨如何在Visual Studio 2005环境下利用OpenCV库从USB摄像头实现实时人脸检测。 首先,我们需要安装OpenCV库。OpenCV支持多种编程语言,包括C++、Python等,但在这个案例中,我们使用C++。安装...
OpenCV可以用于复杂的应用,如人脸识别、手势识别、实时视频分析等。结合其他库(如numpy、matplotlib等),可以构建更复杂的视觉系统。 综上所述,"opencv-tutorial"这个压缩包文件很可能包含了关于OpenCV的基础...
在Android平台上,OpenCV是一个强大的计算机视觉库,用于处理图像和视频数据,广泛应用于人脸识别、图像处理、机器学习等多个领域。本项目标题提及的是“android opencv 人脸检测、对比(无opencv manager)”,这意味...
基于OpenCV的视频道路车道检测源码 基于OpenCV的视频道路车道检测源码 基于OpenCV的视频道路车道检测源码 基于OpenCV的视频道路车道检测源码 基于OpenCV的视频道路车道检测源码 基于OpenCV的视频道路车道...
4. 可以对检测到的人脸进行进一步处理,如框出人脸、进行人脸识别等。 在VC6.0环境下,你需要链接OpenCV库,并确保项目配置正确,才能调用OpenCV的函数。同时,需要注意的是,VC6.0是一个较老的开发环境,对于现代...
在本实践项目中,我们将深入探讨如何利用Python和OpenCV库进行实时视频目标检测。OpenCV(开源计算机视觉库)是一个强大的工具,广泛应用于图像处理和计算机视觉领域,包括目标检测、图像分析、图像增强等任务。...
OpenCV实例程序源代码-人脸检测.c
1. 初始化OpenCV:在Activity的`onCreate()`方法中调用`OpenCVLoader.initAsync()`初始化OpenCV库。 2. 加载级联分类器:创建`CascadeClassifier`实例,加载对应的XML文件。 3. 获取相机预览流:通过`SurfaceView`或...
openCV人脸检测的C++代码
OpenCV支持多种编程语言,包括C++、Python等,它的核心功能包括图像读取、显示、处理、分析以及视频处理。在图像处理方面,OpenCV可以进行像素级别的操作,如灰度化、直方图均衡化、滤波等;在图像分析方面,它可以...
OpenCV和YOLOv8实时车速检测+车辆检测跟踪 OpenCV和YOLOv8实时车速检测+车辆检测跟踪 车辆检测器 这是一个交通监控系统的项目。 使用OpenCV和YOLOv8实现如下功能,实时车辆检测、车辆跟踪、实时车速检测,以及检测...
总的来说,"OpenCV+C++图像处理设计-人脸检测与识别系统DEMO源代码"是一个实践性强、教育意义深远的项目,涵盖了OpenCV在图像处理领域的核心技术和应用实例,对于提升开发者在这一领域的技能大有裨益。
OpenCV 实践:面部检测与图像处理技术