OpenCV 的人脸识别应用

该代码示例展示了如何使用OpenCV库实现实时的人脸检测。程序打开默认摄像头,读取视频流,将帧转化为灰度图像,然后通过CascadeClassifier加载的人脸检测模型进行人脸检测。检测到的人脸会被标注并显示在界面上。用户可以按ESC键退出程序。
摘要由CSDN通过智能技术生成
#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 库和依赖项。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术支持在线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值