4.3 利用openCV实现人脸识别
本文介绍了使用OpenCV实现人脸识别的简单方法。通过加载预训练的人脸检测分类器,可以快速识别图片或实时视频中的人脸。主要步骤包括:1)加载haarcascade_frontalface_default.xml模型;2)将图像转换为灰度图;3)使用detectMultiScale检测人脸;4)用绿色矩形框标记识别到的人脸。文章提供了静态图片检测和摄像头实时检测两种实现方式的核心代码,并指出该算法可
4.3 利用openCV实现人脸识别
这节课,我们再来看一个简单且实用的例子:人脸识别。这个小例子可以让你进一步领略openCV的强悍。
一、最终效果

二、实现原理
openCV可以加载预训练好的人脸识别模型,可以快速识别出图像中的人脸。
三、实现过程
1.复制demo4.2并改名为demo4.3。
2.修改capImg函数:
|
int fmle::capImg() { // 加载人脸检测分类器 cv::CascadeClassifier faceCascade; faceCascade.load("E:\\SDK\\opencv-sdk\\data\\haarcascades\\haarcascade_frontalface_default.xml"); cv::Mat image; image = cv::imread("girl.jpg"); // 将图像转换为灰度图像 cv::Mat grayImage; cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY); // 进行人脸检测 faceCascade.detectMultiScale(grayImage, faces, 1.1, 3, 0, cv::Size(30, 30)); // 在图像上绘制检测到的人脸 for (const auto& face : faces) { cv::rectangle(image, face, cv::Scalar(0, 255, 0), 2); } mainDlg->drawMatOfPub(image); return 0; } |
3.调试运行,当人脸被检测到时会在人脸周围显示绿框。
4.当然也可以实时检测摄像头中的人脸,流程与图片检测差不多,修改capCam函数:
|
int fmle::capCam() { // 加载人脸检测分类器 cv::CascadeClassifier faceCascade; faceCascade.load("E:\\SDK\\opencv-sdk\\data\\haarcascades\\haarcascade_frontalface_default.xml"); videoCap.open(0); while (true) { cv::Mat image; BOOL ifSuccess = videoCap.read(image); // 将图像转换为灰度图像 cv::Mat grayImage; cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY); // 进行人脸检测 faceCascade.detectMultiScale(grayImage, faces, 1.1, 3, 0, cv::Size(30, 30)); // 在图像上绘制检测到的人脸 for (const auto& face : faces) { cv::rectangle(image, face, cv::Scalar(0, 255, 0), 2); } mainDlg->drawMatOfPub(image); Sleep(40); } videoCap.release(); return 0; } |
当然,这个算法也不是尽善尽美,有时候也会识别失败。
更多推荐


所有评论(0)