编写一个基于opencv的c++人脸识别
时间: 2023-10-06 22:06:43 浏览: 90
基于opencv的人脸识别c++()
基于OpenCV的人脸识别可以通过使用OpenCV提供的人脸检测器和识别器来实现。以下是一个基于OpenCV的简单人脸识别示例代码,仅供参考:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
// 加载人脸检测器
CascadeClassifier face_cascade;
if (!face_cascade.load("haarcascade_frontalface_default.xml")) {
cerr << "无法加载人脸检测器" << endl;
return -1;
}
// 加载人脸识别器
Ptr<FaceRecognizer> recognizer = LBPHFaceRecognizer::create();
recognizer->read("faces.yml");
// 打开摄像头
VideoCapture cap(0);
if (!cap.isOpened()) {
cerr << "无法打开摄像头" << endl;
return -1;
}
// 创建窗口
namedWindow("人脸识别", WINDOW_NORMAL);
while (true) {
// 读取摄像头图像
Mat frame;
cap >> frame;
if (frame.empty()) {
cerr << "无法读取摄像头图像" << endl;
break;
}
// 灰度化图像
Mat gray;
cvtColor(frame, gray, COLOR_BGR2GRAY);
// 人脸检测
std::vector<Rect> faces;
face_cascade.detectMultiScale(gray, faces, 1.1, 3, 0, Size(80, 80));
// 遍历所有检测到的人脸
for (int i = 0; i < faces.size(); i++) {
// 识别人脸
Mat face = gray(faces[i]);
int label = -1;
double confidence = 0.0;
recognizer->predict(face, label, confidence);
// 绘制人脸矩形框
rectangle(frame, faces[i], Scalar(0, 0, 255), 2);
// 绘制人脸识别结果
String text = format("Person %d, Confidence: %.2f", label, confidence);
putText(frame, text, Point(faces[i].x, faces[i].y - 10), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(0, 0, 255), 2);
}
// 显示图像
imshow("人脸识别", frame);
// 等待按键
int key = waitKey(1);
if (key == 27) {
break;
}
}
// 关闭摄像头
cap.release();
// 关闭窗口
destroyAllWindows();
return 0;
}
```
这段代码可以实现基本的人脸检测和识别,但是准确度还有待提高,可以根据具体需求进行修改和优化。另外,需要注意的是,这段代码需要下载并导入OpenCV的库文件和人脸检测器模型文件(haarcascade_frontalface_default.xml),以及人脸识别器训练模型文件(faces.yml)。
阅读全文