使用dlib库从摄像头中取最大的一张人脸进行人眼检测的c++程序
时间: 2023-02-12 10:57:59 浏览: 167
下面是一个使用 dlib 库从摄像头中取出最大的一张人脸进行人眼检测的 C++ 程序示例:
```C++
#include <iostream>
#include <dlib/opencv.h>
#include <opencv2/highgui/highgui.hpp>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing/render_face_detections.h>
#include <dlib/image_processing.h>
using namespace dlib;
using namespace std;
int main()
{
try
{
// 初始化摄像头
cv::VideoCapture cap(0);
if (!cap.isOpened())
{
cerr << "Unable to connect to camera" << endl;
return 1;
}
// 初始化人脸检测器
frontal_face_detector detector = get_frontal_face_detector();
// 初始化人眼检测器
shape_predictor sp;
deserialize("shape_predictor_68_face_landmarks.dat") >> sp;
image_window win;
// 循环读取摄像头帧
while(!win.is_closed())
{
cv::Mat temp;
if (!cap.read(temp))
{
break;
}
// 把 OpenCV 图像转换为 dlib 图像
cv_image<bgr_pixel> cimg(temp);
// 人脸检测
std::vector<rectangle> faces = detector(cimg);
if (faces.size() > 0)
{
// 检测到人脸
// 找出最大的人脸
rectangle max_face;
int max_area = 0;
for (int i = 0; i < faces.size(); i++)
{
int area = faces[i].area();
if (area > max_area)
{
max_area = area;
max_face = faces[i];
}
}
// 人眼检测
full_object_detection shape = sp(cimg, max_face);
// 在图像上渲染人眼检测结果
win.clear_overlay();
win.set_image(cimg);
win.add_overlay(render_face_detections(shape));
}
else
{
// 没有检测到人脸
win.
阅读全文