怎样使用OpenCV进行opencv摄像头人脸识别别

【OpenCV人脸识别入门教程之二】人脸检测
【OpenCV人脸识别入门教程之二】人脸检测
本篇文章主要介绍了如何使用OpenCV实现人脸检测。本文不具体讲解人脸检测的原理,直接使用OpenCV实现。
OpenCV版本:2.4.10;VS开发版本:VS2012。
一、OpenCV人脸检测
要实现人脸识别功能,首先要进行人脸检测,判断出图片中人脸的位置,才能进行下一步的操作。
1、OpenCV人脸检测的方法
在OpenCV中主要使用了两种特征(即两种方法)进行人脸检测,Haar特征和LBP特征。
在OpenCV中,使用已经训练好的XML格式的分类器进行人脸检测。在OpenCV的安装目录下的sources文件夹里的data文件夹里可以看到下图所示的内容:
上图中文件夹的名字“haarcascades”、“hogcascades”和“lbpcascades”分别表示通过“haar”、“hog”和“lbp”三种不同的特征而训练出的分类器:即各文件夹里的文件。&haar&特征主要用于人脸检测,“hog”特征主要用于行人检测,“lbp”特征主要用于人脸识别。打开“haarcascades”文件夹,如下图所示
图中的XML文件即是我们人脸检测所需要的分类器文件。在实际使用中,推荐使用上图中被标记的“haarcascade_frontalface_alt2.xml”分类器文件,准确率和速度都比较好。
2、OpenCV中的人脸检测的类
在OpenCV中,使用类“CascadeClassifier”进行人脸检测
CascadeClassifier faceC
//实例化对象
所需要使用的函数:
faceCascade.load(&../data/haarcascade_frontalface_alt2&);
//加载分类器
faceCascade.detectMultiScale(imgGray, faces, 1.2, 6, 0, Size(0, 0));
//多尺寸检测人脸
实现人脸检测主要依赖于detectMultiScale()函数,下面简单说一下函数参数的含义,先看函数原型:
CV_WRAP virtual void detectMultiScale( const Mat& image,
CV_OUT vector&Rect&& objects,
double scaleFactor=1.1,
int minNeighbors=3, int flags=0,
Size minSize=Size(),
Size maxSize=Size() );
各参数含义:
const Mat& image: 需要被检测的图像(灰度图)vector&Rect&& objects: 保存被检测出的人脸位置坐标序列double scaleFactor: 每次图片缩放的比例int minNeighbors: 每一个人脸至少要检测到多少次才算是真的人脸int flags: 决定是缩放分类器来检测,还是缩放图像Size(): 表示人脸的最大最小尺寸
二、代码实现
1、检测图片中的人脸
#include&opencv2/objdetect/objdetect.hpp&
#include&opencv2/highgui/highgui.hpp&
#include&opencv2/imgproc/imgproc.hpp&
//人脸检测的类
CascadeClassifier faceC
int main()
faceCascade.load(&../data/haarcascade_frontalface_alt2.xml&);
//加载分类器,注意文件路径
Mat img = imread(&../data/PrettyGirl.jpg&);
vector&Rect&
if(img.empty())
if(img.channels() ==3)
cvtColor(img, imgGray, CV_RGB2GRAY);
faceCascade.detectMultiScale(imgGray, faces, 1.2, 6, 0, Size(0, 0));
//检测人脸
if(faces.size()&0)
for(int i =0; i&faces.size(); i++)
rectangle(img, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height),
Scalar(0, 255, 0), 1, 8);
//框出人脸位置
imshow(&FacesOfPrettyGirl&, img);
waitKey(0);
结果如下图:
2、检测视频中的人脸
#include&opencv2/objdetect/objdetect.hpp&
#include&opencv2/highgui/highgui.hpp&
#include&opencv2/imgproc/imgproc.hpp&
//人脸检测的类
CascadeClassifier faceC
int main()
faceCascade.load(&../data/haarcascade_frontalface_alt2.xml&);
//加载分类器,注意文件路径
cap.open(0);
//打开摄像头
//cap.open(&../data/test.avi&);
//打开视频
Mat img, imgG
vector&Rect&
int c = 0;
if(!cap.isOpened())
while(c!=27)
if(img.channels() ==3)
cvtColor(img, imgGray, CV_RGB2GRAY);
faceCascade.detectMultiScale(imgGray, faces, 1.2, 6, 0, Size(0, 0));
//检测人脸
if(faces.size()&0)
for(int i =0; i&faces.size(); i++)
rectangle(img, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height),
Scalar(0, 255, 0), 1, 8);
//框出人脸位置
imshow(&Camera&, img);
c = waitKey(1);
在视频实时检测时,可能会出现卡顿,是因为检测人脸花费了过多的时间,这里代码只实现基本功能,并未优化。
我的热门文章
即使是一小步也想与你分享&&&&android人脸识别(用opencv实现)
android人脸识别(用opencv实现)
能实现对人脸的识别,具有实时的对人脸信息的抓取,通过编译opencv2.4.5源码生成静态库,使用jni和NDK技术对本地c++代码编译成动态库,上层用java代码实现(代码不多,简单易懂)。对于初学者这是一个很好的例子。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
移动开发下载排行

我要回帖

更多关于 java opencv 人脸识别 的文章

 

随机推荐