当前位置: 首页 > news >正文

Qt+Opencv:人脸检测

话接上一篇,我们仍使用在上篇《Qt+Opencv:Qt中部署opencv》创建的Qt项目来测试opencv提供的sample。

在正式开始本篇之前,我们先说做一下准备工作:

一、opencv官方文档

学习最权威和最可靠的方式,就是阅读官方文档和实践模块samples。同样,opencv的文档个人觉得做的还是可以的,当然,相对于我们熟悉Qt开发的朋友来说,这帮助文档还是“略微逊色”。
上篇,我们选定opencv 3.4.16 版本进行工程实践,所以我们对应去看该版本的文档即可。
doc地址:https://docs.opencv.org/3.4.16/
在这里插入图片描述

有朋友会问3.0和4.0的版本有什么大的变化么,答案是我目前也不知道,后面在逐渐精进深入的过程中,版本特性比较,必然也是我们要做的工作之一。所谓知己知彼,百战不殆。手握神剑,当然要尽可能把圣剑之威力发挥的淋漓尽致。不过话说回来,opencv太大面太广,深入研究某一模块到极致就可惊为天人了,不必泛泛求全。但是,保持对知识的贪婪和饥渴,总能促使人不断的学习和进步。话说,作者写这篇的时候已经忘记吃饭。

二、下载源码和samples

地址:https://github.com/opencv/opencv/tree/3.4

在这里插入图片描述
data中有我们本章人脸检测的数据模型,需要拷贝到我们Qt自己的项目目录下。譬如作者自己的:
在这里插入图片描述

三、项目实践

#include <QApplication>
#include <opencv.hpp>
#include <QDebug>
#include <opencv2/imgproc.hpp>  // Gaussian Blur
#include <opencv2/core.hpp>     // Basic OpenCV structures (cv::Mat, Scalar)
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>  // OpenCV window I/O
#include <opencv2/features2d.hpp>
#include <opencv2/objdetect.hpp>
#include <stdio.h>using namespace std;
using namespace cv;const string WindowName = "Face Detection example";class CascadeDetectorAdapter: public DetectionBasedTracker::IDetector
{public:CascadeDetectorAdapter(cv::Ptr<cv::CascadeClassifier> detector):IDetector(),Detector(detector){CV_Assert(detector);}void detect(const cv::Mat &Image, std::vector<cv::Rect> &objects) CV_OVERRIDE{Detector->detectMultiScale(Image, objects, scaleFactor, minNeighbours, 0, minObjSize, maxObjSize);}virtual ~CascadeDetectorAdapter() CV_OVERRIDE{}private:CascadeDetectorAdapter();cv::Ptr<cv::CascadeClassifier> Detector;};int main(int , char** )
{namedWindow(WindowName);VideoCapture VideoStream(0);if (!VideoStream.isOpened()){printf("Error: Cannot open video stream from camera\n");return 1;}/// 这里模型文件的路径一定要写对,按照各位的项目配置实际填写/// 可以使用绝对路径,也可以使用相对路径std::string cascadeFrontalfilename = samples::findFile("data/lbpcascades/lbpcascade_frontalface.xml");cv::Ptr<cv::CascadeClassifier> cascade = makePtr<cv::CascadeClassifier>(cascadeFrontalfilename);cv::Ptr<DetectionBasedTracker::IDetector> MainDetector = makePtr<CascadeDetectorAdapter>(cascade);if ( cascade->empty() ){printf("Error: Cannot load %s\n", cascadeFrontalfilename.c_str());return 2;}cascade = makePtr<cv::CascadeClassifier>(cascadeFrontalfilename);cv::Ptr<DetectionBasedTracker::IDetector> TrackingDetector = makePtr<CascadeDetectorAdapter>(cascade);if ( cascade->empty() ){printf("Error: Cannot load %s\n", cascadeFrontalfilename.c_str());return 2;}DetectionBasedTracker::Parameters params;DetectionBasedTracker Detector(MainDetector, TrackingDetector, params);if (!Detector.run()){printf("Error: Detector initialization failed\n");return 2;}Mat ReferenceFrame;Mat GrayFrame;vector<Rect> Faces;do{VideoStream >> ReferenceFrame;   /// 获取每一帧图像cvtColor(ReferenceFrame, GrayFrame, COLOR_BGR2GRAY);Detector.process(GrayFrame);Detector.getObjects(Faces);  for (size_t i = 0; i < Faces.size(); i++){rectangle(ReferenceFrame, Faces[i], Scalar(0,255,0));  /// 人脸检测并绘制矩形}imshow(WindowName, ReferenceFrame);} while (waitKey(30) < 0);  /// 等待按键触发,退出检测loopDetector.stop();return 0;
}

四、效果演示(博主自爆了*)

在这里插入图片描述
下一张我们深入研究人脸检测(此模型只支持正脸)的实现,以及模型文件杂谈一二~

http://www.lryc.cn/news/268971.html

相关文章:

  • ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用
  • Unreal Engine游戏引擎的优势
  • [OCR]Python 3 下的文字识别CnOCR
  • 字符串序列判定(100%用例)C卷 (JavaPythonNode.jsC语言C++)
  • ERROR: No matching distribution found for torch==2.0.1解决方案
  • ClickHouse基础知识(五):ClickHouse的SQL 操作
  • 【Python基础】字符串
  • Linux中proc文件系统相关介绍
  • 深入理解 YOLOv8:解析.yaml 配置文件目标检测、实例分割、图像分类、姿态检测
  • oracle与mysql的分析函数(窗口函数)
  • 《微信小程序开发从入门到实战》学习六十五
  • 开箱即用的企业级数据和业务管理中后台前端框架Ant Design Pro 5的开箱使用和偏好配置
  • 怎么用Facebook找客户?Facebook开发客户攻略分享
  • 【Vue2+3入门到实战】(12)自定义指令的基本语法(全局、局部注册)、 指令的值、v-loading的指令封装 详细示例
  • Android studio socket客户端应用设计
  • 【UTC格式】Oracle低版本实现UTC格式转换
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • Java 缓存中间件
  • 使用cmake配置matplotlibcpp生成VS项目
  • Android : 画布绘制矩形和文字 让其居中显示简单应用
  • 科研学习|论文解读——融合类目偏好和数据场聚类的协同过滤推荐算法研究
  • 算法学习系列(十五):最小堆、堆排序
  • HCIA-Datacom题库(自己整理分类的)——OSPF协议多选
  • elasticsearch-hadoop.jar 6.8版本编译异常
  • 面试经典150题(50-53)
  • Jetpack Compose中使用Android View
  • 《MySQL》事务篇
  • 高阶组件和高阶函数是什么
  • 初步认识API安全
  • MybatisX逆向工程方法