#include <iostream>
#include <opencv2/opencv.hpp> // 引入 OpenCV 库
using namespace cv; // 使用 OpenCV 命名空间
int main() {
CascadeClassifier faceCascade; // 声明人脸分类器变量
VideoCapture camera(0); // 打开默认摄像头,获取视频流
if (!camera.isOpened()) { // 判断摄像头是否打开成功
std::cerr << "Could not open camera." << std::endl;
return -1;
}
if (!faceCascade.load("haarcascade_frontalface_default.xml")) { // 加载人脸分类器
std::cerr << "Could not load face classifier." << std::endl;
return -1;
}
namedWindow("Face Detection", WINDOW_NORMAL); // 创建窗口,用于显示人脸检测结果
while (true) { // 循环处理每一帧视频
Mat frame, grayFrame; // 定义帧图像和灰度图像
camera >> frame; // 从摄像头中读取一帧视频流
cvtColor(frame, grayFrame, COLOR_BGR2GRAY); // 将彩色帧图像转换为灰度图像
equalizeHist(grayFrame, grayFrame); // 直方图均衡化,增强图像对比度
std::vector<Rect> faces; // 定义人脸矩形向量,用于存储检测到的人脸位置
faceCascade.detectMultiScale(grayFrame, faces, 1.3, 5); // 使用分类器进行人脸检测,返回检测到的人脸矩形向量
for (size_t i = 0; i < faces.size(); i++) { // 遍历每一个检测到的人脸矩形
Point center(faces[i].x + faces[i].width / 2, faces[i].y + faces[i].height / 2); // 计算人脸矩形的中心点
ellipse(frame, center, Size(faces[i].width / 2, faces[i].height / 2), 0, 0, 360, Scalar(255, 0, 255), 2, LINE_AA); // 用椭圆绘制人脸矩形
putText(frame, "Face Detected", Point(faces[i].x, faces[i].y - 5), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 255), 2); // 在人脸矩形上方添加文字说明
}
imshow("Face Detection", frame); // 显示人脸检测结果
if (waitKey(1) == 27) { // 每隔一段时间检测键盘输入,如果按下 ESC 键则退出循环
break;
}
}
return 0; //
OpenCV 的人脸检测应用,可以通过打开默认摄像头获取视频流并实时检测人脸。需要注意的是,该代码需要在 OpenCV 环境下进行编译和运行,需要安装并配置好相应的 OpenCV 库和依赖项。