用c++基于opencv做出人脸识别训练代码
时间: 2023-07-24 07:17:54 浏览: 125
C++利用opencv实现人脸检测
5星 · 资源好评率100%
以下是使用C++和OpenCV实现人脸识别的示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
// 加载人脸检测分类器
CascadeClassifier face_cascade;
if (!face_cascade.load("haarcascade_frontalface_default.xml")) {
cout << "Error loading face cascader." << endl;
return -1;
}
// 加载LBPH人脸识别器
Ptr<LBPHFaceRecognizer> recognizer = LBPHFaceRecognizer::create();
recognizer->read("faces.yml");
// 打开摄像头
VideoCapture cap(0);
if (!cap.isOpened()) {
cout << "Error opening camera." << endl;
return -1;
}
// 循环处理每一帧
while (true) {
Mat frame;
cap.read(frame);
// 将帧转换为灰度图
Mat gray;
cvtColor(frame, gray, COLOR_BGR2GRAY);
// 检测人脸
vector<Rect> faces;
face_cascade.detectMultiScale(gray, faces, 1.1, 3, 0, Size(30, 30));
// 对每个人脸进行识别
for (int i = 0; i < faces.size(); i++) {
// 提取人脸图像并调整大小
Mat face = gray(faces[i]);
resize(face, face, Size(200, 200));
// 进行人脸识别
int label = -1;
double confidence = 0.0;
recognizer->predict(face, label, confidence);
// 在图像上标记人脸和识别结果
rectangle(frame, faces[i], Scalar(255, 0, 0), 2);
putText(frame, to_string(label), faces[i].tl(), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(0, 255, 0), 2);
}
// 显示图像
imshow("Face Recognition", frame);
// 等待按下ESC键退出程序
if (waitKey(30) == 27) {
break;
}
}
// 释放摄像头并关闭窗口
cap.release();
destroyAllWindows();
return 0;
}
```
在上面的代码中,我们首先加载了人脸检测分类器和LBPH人脸识别器。然后,我们打开摄像头并循环处理每一帧。对于每一帧,我们将其转换为灰度图,并使用人脸检测分类器检测其中的人脸。对于每个检测到的人脸,我们提取其图像并调整大小,然后使用LBPH人脸识别器进行识别。最后,我们在图像上标记人脸和识别结果,并显示图像。当用户按下ESC键时,程序退出。
需要注意的是,上面的代码仅适用于识别摄像头中的人脸。如果你需要识别静态图像中的人脸,可以将摄像头替换为读取图像文件的代码。另外,你也可以对代码进行修改以适应你的具体需求,如调整分类器参数、训练自己的人脸识别模型等。
阅读全文