博客
关于我
Windows下使用QT+OpenCV完成人脸检测(获取摄像头的数据进行检测)
阅读量:237 次
发布时间:2019-03-01

本文共 2628 字,大约阅读时间需要 8 分钟。

以下是优化后的文章内容:


OpenCV与QT开发环境搭建及人脸检测应用

在本文中,我将详细介绍如何在QT环境下使用OpenCV进行人脸检测开发,并分享相关的开发经验和注意事项。

一、环境介绍

目前使用的开发环境如下:

  • 操作系统:Windows 10 X64
  • OpenCV版本:2.4.13.6
  • QT版本:5.12

二、OpenCV库的下载与配置

  • OpenCV库的下载

    OpenCV的最新版本为4.2.0,但由于我在项目中使用的是2.4.13.6版本,这是因为在Windows环境下,3.X版本的OpenCV库只提供X64版本的动态库,而2.X版本则支持X86和X64库的下载。为了兼容现有环境,我选择了2.4.13.6版本进行开发。

  • 库的安装

    下载完成后,解压到指定目录,例如桌面上创建一个名为OpenCV2.4的文件夹,并将解压后的文件放在其中。

  • 环境变量的配置

    在系统环境变量中添加OpenCV库的路径。具体步骤如下:

    • 右键点击“开始”按钮,选择“系统” > “环境变量”。
    • 在“系统变量”部分,找到“路径”(Path),然后按下“新建”按钮。
    • 在对话框中输入OpenCV库的安装目录,例如C:\OpenCV2.4\bin,然后点击“确定”。
    • 另外,在“用户变量”部分,找到“PATH”,并将OpenCV的安装目录添加到其中。
  • 三、项目开发与实现

  • 项目创建与配置

    创建一个新的QT项目,选择“空项目”选项,填写项目名称,点击“确定”创建项目。在项目的*.pro文件中,添加必要的库和头文件路径:

    QT       += core guiQT       += multimediaQT       += networkQT       += widgetsQT       += xmlCONFIG += c++11DEFINES += QT_DEPRECATED_WARNINGS
  • 依赖项的添加

    在项目中添加OpenCV库的头文件和动态库。根据安装目录C:\OpenCV2.4\includeC:\OpenCV2.4\lib,在*.pro文件中添加:

    INCLUDEPATH += C:\OpenCV2.4\includeLIBS += C:\OpenCV2.4\lib\*
  • UI界面设计

    使用QT的设计工具创建界面,添加必要的控件,如摄像头选择、实时显示区域、日志显示区域等。

  • 人脸检测功能实现

    widget.cpp中,使用OpenCV的cvHaarDetectObjects函数进行人脸检测。以下是核心代码片段:

    void Widget::opencv_face(QImage qImage) {    static CvMemStorage* storage = 0;    static CvHaarClassifierCascade* cascade = 0;    const char* cascade_name = "C:/OpenCV2.4/opencv/sources/data/haarcascades_GPU/haarcascade_frontalface_alt2.xml";    cascade = cvLoad(cascade_name);    if (!cascade) {        Log_Display_0("分类器加载错误.\n");        return;    }    IplImage* img = QImageToIplImage(&qImage);    if (!img) {        Log_Display_0("图片加载错误.\n");        return;    }    // 人脸检测并绘制框架    CvRect* r = (CvRect*)cvGetSeqElem(objects, i);    cvRectangle(img, cvPoint(r->x, r->y), cvPoint((r->x + r->width) * scale, (r->y + r->height) * scale), colors[i % 8]);    // 绘制圆圈    CvPoint center;    center.x = cvRound((r->x + r->width / 2) * scale);    center.y = cvRound((r->y + r->height / 2) * scale);    radius = cvRound((r->width + r->height) * 0.25 * scale);    cvCircle(img, center, radius, colors[i % 8], 3, 8, 0);    show_face(img);}
  • 信号与槽的使用

    在线程中获取摄像头数据,并通过信号与槽机制将数据传递到主线程进行显示和处理。

  • 四、实现效果与测试

  • 实时显示与人脸检测

    通过定时器每100ms获取一次摄像头数据,并在UI界面上实时显示。使用OpenCV的高效算法,实现了快速的人脸检测和框架绘制。

  • 性能优化

    通过优化图像处理算法和调整定时器间隔,实现了流畅的图像显示和快速的人脸检测。

  • 五、核心代码解析

  • widget.h文件

    定义了Widget类及其成员变量和信号槽。包括OpenCV相关的头文件和QT组件的声明。

  • widget.cpp文件

    实现了人脸检测的主要逻辑,包括摄像头数据处理、图像转换、人脸检测和框架绘制等功能。

  • main.cpp文件

    使用QT应用程序主类创建并展示Widget窗口,启动应用程序并执行主循环。

  • 六、开发经验与总结

  • 环境配置的重要性

    OpenCV库的正确安装和环境变量的配置是项目成功的关键。任何一个环节的疏忽都可能导致程序无法运行或崩溃。

  • 线程管理的复杂性

    在多线程环境下,信号与槽的使用需要谨慎,确保数据的正确传递和线程的安全性。

  • 性能优化的必要性

    随着图像处理需求的增加,定时器间隔和算法优化变得越来越重要,以确保实时性和流畅性。

  • 代码的可维护性

    通过合理的代码结构和清晰的注释,使得维护和优化变得更加容易。


  • 以上内容详细介绍了在Windows环境下使用OpenCV与QT进行人脸检测开发的完整流程,涵盖了开发环境的搭建、项目配置、功能实现以及性能优化等多个方面。

    转载地址:http://ycwt.baihongyu.com/

    你可能感兴趣的文章
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_使用NIFI表达式语言_来获取自定义属性中的数据_NIFI表达式使用体验---大数据之Nifi工作笔记0024
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群2_实际操作搭建NIFI内嵌模式集群---大数据之Nifi工作笔记0016
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_实际操作_03---大数据之Nifi工作笔记0035
    查看>>
    NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
    查看>>
    NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_02---大数据之Nifi工作笔记0034
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>