简单用C++基于opencv实现对图片中人脸识别
时间: 2024-05-13 20:19:28 浏览: 11
要使用C++和OpenCV实现对图片中人脸的识别,可以按照以下步骤:
1. 安装OpenCV库:在你的操作系统上安装OpenCV库,可以参考官方文档或者其他教程。
2. 加载分类器:OpenCV中已经提供了一些已经训练好的分类器,可以用来识别人脸。在C++中,可以使用CascadeClassifier类来加载分类器文件,例如:
```
CascadeClassifier face_cascade;
face_cascade.load("haarcascade_frontalface_alt.xml");
```
3. 加载图像:使用OpenCV的imread函数加载需要识别的图像,例如:
```
Mat img = imread("test.jpg");
```
4. 人脸识别:使用CascadeClassifier的detectMultiScale函数来进行人脸识别,例如:
```
vector<Rect> faces;
face_cascade.detectMultiScale(img, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30));
```
其中detectMultiScale函数的参数含义如下:
- img:需要识别的图像。
- faces:用来存储检测到的人脸的矩形框。
- 1.1:表示每次缩小图像时人脸检测窗口的尺寸比例。
- 2:表示每个候选矩形至少被检测到两次才被认为是人脸。
- 0|CASCADE_SCALE_IMAGE:使用默认参数。
- Size(30, 30):最小检测尺寸。
5. 显示结果:将检测结果绘制到原图上,并在窗口中显示,例如:
```
for (size_t i = 0; i < faces.size(); i++)
{
rectangle(img, faces[i], Scalar(0, 0, 255), 2);
}
imshow("result", img);
waitKey(0);
```
完整代码如下:
```
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
CascadeClassifier face_cascade;
face_cascade.load("haarcascade_frontalface_alt.xml");
Mat img = imread("test.jpg");
if (img.empty())
{
cout << "Failed to load image!" << endl;
return -1;
}
vector<Rect> faces;
face_cascade.detectMultiScale(img, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30));
for (size_t i = 0; i < faces.size(); i++)
{
rectangle(img, faces[i], Scalar(0, 0, 255), 2);
}
imshow("result", img);
waitKey(0);
return 0;
}
```