opencv人脸识别代码c++
时间: 2024-10-06 09:04:45 浏览: 40
opencv人脸识别(c++实现)
在 OpenCV 中,人脸检测通常涉及以下几个步骤:
1. **库加载**:首先需要导入 `opencv2/objdetect` 和 `opencv2/highgui` 库,这两个包含了 Haar 级联分类器和支持向量机(SVM)的人脸检测模块。
```cpp
#include <opencv2/objdetect.CascadeClassifier.hpp>
#include <opencv2/highgui/highgui.hpp>
```
2. **加载级联分类器**:这是关键部分,你需要一个训练好的 Haar 级联文件(如 `haarcascade_frontalface_default.xml`),它定义了人脸特征。
```cpp
cv::CascadeClassifier face_cascade;
if (!face_cascade.load("haarcascade_frontalface_default.xml")) {
std::cerr << "Failed to load face cascade" << std::endl;
exit(1);
}
```
3. **读取图像并预处理**:从硬盘或网络获取图片,然后转换成灰度,并调整大小以便于快速处理。
```cpp
cv::Mat img = cv::imread("input.jpg");
cv::cvtColor(img, img, cv::COLOR_BGR2GRAY);
cv::resize(img, img, cv::Size(), 0.5, 0.5);
```
4. **人脸检测**:应用级联分类器到图像上,找出可能的人脸区域。
```cpp
std::vector<cv::Rect> faces;
face_cascade.detectMultiScale(img, faces, 1.1, 4, 0|cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30));
```
5. **显示结果**:对于每个检测到的人脸,可以在原始图像上绘制矩形框。
```cpp
for (const auto& face : faces) {
cv::rectangle(img, face, cv::Scalar(255, 0, 0), 2);
}
cv::imshow("Face Detection", img);
cv::waitKey();
```
6. **保存或进一步处理**:如果需要,可以将结果显示出来,也可以对人脸做进一步的操作,比如识别、跟踪等。
```cpp
cv::imwrite("output.jpg", img); // 保存结果
```
阅读全文