使用dlib库从摄像头中取人脸进行人眼检测的c++程序,直接给代码,不要说思路...
时间: 2024-03-05 22:51:44 浏览: 72
好的,以下是使用dlib库进行人眼检测的C++程序,需要先安装dlib库和OpenCV库:
```c++
#include <iostream>
#include <dlib/opencv.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing/render_face_detections.h>
#include <dlib/image_processing.h>
using namespace std;
using namespace dlib;
using namespace cv;
int main()
{
// 初始化人脸检测器
frontal_face_detector detector = get_frontal_face_detector();
// 初始化人眼检测器
shape_predictor predictor;
deserialize("shape_predictor_68_face_landmarks.dat") >> predictor;
// 打开摄像头
VideoCapture cap(0);
if (!cap.isOpened())
{
cout << "无法打开摄像头!" << endl;
return -1;
}
// 循环读取视频帧
while (true)
{
Mat frame;
cap.read(frame);
// 转换为dlib图像
cv_image<bgr_pixel> cimg(frame);
// 人脸检测
std::vector<rectangle> faces = detector(cimg);
// 对每张人脸进行人眼检测
for (unsigned long i = 0; i < faces.size(); ++i)
{
full_object_detection shape = predictor(cimg, faces[i]);
// 绘制人眼位置
for (int j = 36; j <= 47; ++j)
{
circle(frame, Point(shape.part(j).x(), shape.part(j).y()), 2, Scalar(0, 0, 255), -1);
}
}
// 显示图像
imshow("人眼检测", frame);
// 等待按键
if (waitKey(30) >= 0)
{
break;
}
}
return 0;
}
```
这段代码中,我们首先初始化了人脸检测器和人眼检测器,然后打开摄像头,并循环读取视频帧。对于每一帧视频,我们先将其转换为dlib图像类型,然后使用人脸检测器检测出图像中的人脸位置,接着使用人眼检测器对每张人脸进行人眼检测,最后将检测结果绘制在图像上并显示出来。
阅读全文