资源简介
这个是我自己写的Openv中人脸识别类FaceRecognizer,我把进行了封装,从训练到显示,代码简单到只有几行。
代码片段和文件信息
#include “FaceRecognition.h“
using namespace cv;
using namespace std;
using namespace face;
CFaceRecognition::CFaceRecognition()
{
}
CFaceRecognition::~CFaceRecognition()
{
}
BOOL CFaceRecognition::Train(LPCTSTR path LPCTSTR fName)
{
char buffer[MAX_PATH];
_getcwd(buffer MAX_PATH);//获取当前路径
// printf(“The current directory is: %s “ buffer);
string fn_csv; //读取文件的绝对路径
fn_csv = buffer;
fn_csv = fn_csv + path;
//string fn_csv = “C:\\Users\\Administrator\\Desktop\\face\\Train\\FaceTest\\image\\at.txt“;//读取你的CSV文件路径.
//string fn_csv = “./image/at.txt“;//读取你的CSV文件路径. 相对路径读取失败
vector images;// 2个容器来存放图像数据和对应的标签
vector labels;
if (images.size())
{
return FALSE;
}
read_csv(fn_csv images labels);//从csv文件中批量读取训练数据
Ptrmodel = createEigenFaceRecognizer();
model->train(images labels);
model->save(fName);//保存路径
return TRUE;
}
BOOL CFaceRecognition::LoadClassifier(LPCTSTR fName)
{
if (!m_FaceCascades.load(“haarcascade_frontalface_alt.xml“))
return FALSE;
m_model = createEigenFaceRecognizer();
m_model->load(fName);
return TRUE;
}
BOOL CFaceRecognition::FaceDetect(cv::Mat srcImageint Label LPCTSTR szName LPCTSTR wdNmae int WaiteKey)
{
std::vector faces; //存储人脸的矩形
Mat edges;
Mat frame_gray;
if (srcImage.channels() == 1)
{
frame_gray = srcImage;
}
else
{
cvtColor(srcImage frame_gray CV_RGB2GRAY);
}
equalizeHist(frame_gray frame_gray); //直方图均衡化
m_FaceCascades.detectMultiScale(frame_gray faces 1.1 2 0 | CV_HAAR_SCALE_IMAGE Size(30 30));//寻找人脸
if (!faces.size())
{
imshow(wdNmae srcImage);
waitKey(WaiteKey);
return FALSE;
}
Mat* pImage_roi = new Mat[faces.size()]; //定以人脸图像数组
// string str;
for (int i = 0; i < faces.size(); i++)
{
pImage_roi[i] = frame_gray(faces[i]); //将所有的脸部保存起来
if (pImage_roi[i].empty())
{
delete[]pImage_roi;
return FALSE;
}
if (Predict(pImage_roi[i]) == Label) //每张图片进行识别
{
Scalar color = Scalar(m_rng.uniform(0 255) m_rng.uniform(0 255) m_rng.uniform(0 255));//所取的颜色任意值
rectangle(srcImage Point(faces[i].x faces[i].y) Point(faces[i].x + faces[i].width faces[i].y + faces[i].height) color 1 8);//放入缓存
putText(srcImage szName Point(faces[i].x faces[i].y) FONT_HERSHEY_COMPLEX 1 Scalar(0 0 255));//添加文字
}
}
delete[]pImage_roi;
imshow(wdNmae srcImage);
waitKey(WaiteKey);
return TRUE;
}
void CFaceRecognition::read_csv(const std::string & filename std::vector& images std::vector& labels char separator)
{
std::ifstream file(filename.c_str() ifstream::in);//c_str()函数可用可不用,无需返回一个标准C类型的字符串
if (!file) {
string error_message = “No valid input file was given please check the given filename.“;
CV_Error(CV_StsBadArg error_message);
}
string line path classlabel;
while (getline(file line))//从文本文件中读取一行字符,未指定限定符默认限定符为“/n”
{
stringstream liness(line);//这里采用stri
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 25600 2017-12-02 10:45 face封装\.vs\Project2\v14\.suo
文件 3548 2017-12-02 10:39 face封装\Project2\FaceRecognition.cpp
文件 1073 2017-12-02 10:27 face封装\Project2\FaceRecognition.h
文件 676709 2017-09-12 11:41 face封装\Project2\haarcascade_frontalface_alt.xm
文件 415 2017-12-02 10:45 face封装\Project2\main.cpp
文件 11928558 2017-12-02 10:40 face封装\Project2\MyTrain.xm
文件 7192 2017-12-02 09:39 face封装\Project2\Project2.vcxproj
文件 1172 2017-12-02 09:39 face封装\Project2\Project2.vcxproj.filters
文件 1306 2017-12-02 08:39 face封装\Project2.sln
目录 0 2017-12-02 08:39 face封装\.vs\Project2\v14
目录 0 2017-12-02 08:39 face封装\.vs\Project2
...D.H. 0 2017-12-02 08:39 face封装\.vs
目录 0 2017-12-02 11:01 face封装\Project2
目录 0 2017-12-02 11:01 face封装
----------- --------- ---------- ----- ----
12645573 14
相关资源
- xfeatures2d.rar
- 基于OpenCV的视频车牌识别
- opencv 普通相机畸变标定校正
- 特征点匹配Demo
- OpenCV2.2 64位
- 基于SVM的手写数字识别Opencv+图像集
- 利用OpenCV(2.4.13)的SURF/SIFT + RANSAC
- asm算法 opencv实现
- OpenCV2.4.9_基于背景差分法的视频目标
- 基于OpenCV的疲劳驾驶检测系统的设计
- OpenCV三维重构代码
- 双目测距-opencv
- opencv人脸/人眼/人体识别分类器
- opencv4.0结合TensorFlow实现mask rcnn的目标
- opencv+qt通过CGI读取网络摄像头工程
- 安装opencv342缺失的boostdesc_bgm.i系列文
- OpenCV2.4.4实现HOG行人检测
- opencv的运动跟踪
- sift算法VC实现需要OPENCV
- opencv标定单目相机
- opencv 数字识别
- itti视觉显著性计算模型opencv实现
- 异常行为检测
- qt+opencv视频图像采集与基于tcp协议的
- opencv2.4.3和4.0函数手册带目录可搜索
- 遗留物检测
- 笔记本OpenCV调用摄像头进行人脸捕捉
- VS+OPENCV手势识别
- opencv下haarclassifiercascade加上LBPHFaceRe
- 图片动漫风格化
评论
共有 条评论