下面是一个使用 OpenCV 和 Dlib 库从摄像头中取人脸进行人眼检测的 C++ 程序示例:
```C++ #include <opencv2/opencv.hpp> #include <dlib/image_processing/frontal_face_detector.h> #include <dlib/image_processing.h>
using namespace cv; using namespace dlib;
int main() { // 打开摄像头 VideoCapture capture(0); if (!capture.isOpened()) { std::cout << "摄像头打开失败" << std::endl; return -1; }
// 创建 Dlib 人脸检测器
frontal_face_detector detector = get_frontal_face_detector();
// 加载 Dlib 人脸关键点检测器
shape_predictor sp;
deserialize("shape_predictor_68_face_landmarks.dat") >> sp;
// 循环读取摄像头帧
Mat frame;
while (capture.read(frame))
{
// 将 OpenCV 图像转换为 Dlib 图像
cv_image<bgr_pixel> cimg(frame);
// 使用 Dlib 检测人脸
std::vector<rectangle> faces = detector(cimg);
if (faces.size() == 0)
{
imshow("人眼检测", frame);
waitKey(10);
continue;
}
// 循环遍历每个检测到的人脸
for (size_t i = 0; i < faces.size(); i++)
{
// 使用 Dlib 检测人脸关键点
full_object_detection shape = sp(cimg, faces[i]);
// 循环遍历每个关键点
for (size_t j = 0; j < shape.num_parts(); j++)
{
// 如果是眼睛关键点
if (j >= 36 && j <= 41)
{
// 在 OpenCV 图像中画出关键点
Point p(shape.part(j).x(), shape.part(j).y());
circle(frame, p, 2, Scalar(0, 255, 0), -1);
}
}
}
// 显示