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

本文共 2659 字,大约阅读时间需要 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 gui
    QT += multimedia
    QT += network
    QT += widgets
    QT += xml
    CONFIG += c++11
    DEFINES += QT_DEPRECATED_WARNINGS
  • 依赖项的添加

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

    INCLUDEPATH += C:\OpenCV2.4\include
    LIBS += 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/

    你可能感兴趣的文章
    Mysql 重置自增列的开始序号
    查看>>
    mysql 锁机制 mvcc_Mysql性能优化-事务、锁和MVCC
    查看>>
    MySQL 错误
    查看>>
    mysql 随机数 rand使用
    查看>>
    MySQL 面试题汇总
    查看>>
    MySQL 面试,必须掌握的 8 大核心点
    查看>>
    MySQL 高可用性之keepalived+mysql双主
    查看>>
    mysql 默认事务隔离级别下锁分析
    查看>>
    Mysql--逻辑架构
    查看>>
    MySql-2019-4-21-复习
    查看>>
    mysql-5.7.18安装
    查看>>
    MySQL-Buffer的应用
    查看>>
    mysql-cluster 安装篇(1)---简介
    查看>>
    mysql-connector-java各种版本下载地址
    查看>>
    mysql-EXPLAIN
    查看>>
    mysql-group_concat
    查看>>
    MySQL-redo日志
    查看>>
    MySQL-【1】配置
    查看>>
    MySQL-【4】基本操作
    查看>>
    Mysql-丢失更新
    查看>>