12、编译QT Opencv项目----------Opencv移植Arm

编译QT Opencv项目

编译QT Opencv项目

因为我们使用的QT项目中包含Opencv,所以要修改pro文件,连接opencv库

bash 复制代码
#-------------------------------------------------
#
# Project created by QtCreator 2024-12-03T00:01:13
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = FaceDetectArm
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0


SOURCES += \
        main.cpp \
        mainwindow.cpp

HEADERS += \
        mainwindow.h

FORMS += \
        mainwindow.ui


# 添加包含路径
INCLUDEPATH += /opt/arm-sysroot/usr/local/include/opencv4

#-------------------------------------------------
# 添加库路径和库
LIBS += -L/opt/arm-sysroot/usr/local/lib \
         -L/opt/arm-sysroot/usr/local/lib/opencv4/3rdparty \
        -lopencv_core \
        -lopencv_imgproc \
        -lopencv_objdetect \
        -lopencv_highgui \
        -lopencv_videoio \
        -lopencv_imgcodecs \
        -lopenjp2 \
        -lopencv_calib3d \
        -lopencv_features2d \
        -lopencv_flann \
        -ldl

# 如果需要链接 Qt 库(通常 Qt 会自动处理)
LIBS += -L/opt/qt5.12.10-arm/lib \
        -lQt5Widgets \
        -lQt5Core \
        -lQt5Gui

# 定义资源文件夹路径
RESOURCES_DIR = $$PWD/resources

# 定义目标复制目录路径
DEST_DIR = $$OUT_PWD/resources

# 仅在 Linux 系统下应用
unix {
    # 添加构建后命令,复制 resources 文件夹到输出目录
    QMAKE_POST_LINK += mkdir -p $$DEST_DIR && cp -r $$RESOURCES_DIR/* $$DEST_DIR/
}

头文件mainwindow.h

cpp 复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include <QImage>
#include <QPixmap>
#include <QMessageBox>
#include <QFileDialog>
#include <opencv2/opencv.hpp>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void updateFrame();
    void on_processImageButton_clicked();
private:
    Ui::MainWindow *ui;
    cv::VideoCapture cap;
    cv::CascadeClassifier faceCascade;
    QTimer *timer;

    QImage Mat2QImage(const cv::Mat &mat);
};

#endif // MAINWINDOW_H

源文件mainwindow.cpp

cpp 复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include <QImage>
#include <QPixmap>
#include <QMessageBox>
#include <QFileDialog>
#include <opencv2/opencv.hpp>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void updateFrame();
    void on_processImageButton_clicked();
private:
    Ui::MainWindow *ui;
    cv::VideoCapture cap;
    cv::CascadeClassifier faceCascade;
    QTimer *timer;

    QImage Mat2QImage(const cv::Mat &mat);
};

#endif // MAINWINDOW_H

主函数main.cpp

cpp 复制代码
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

ui布局

资源文件

项目的人脸训练数据放在resources目录下

haarcascade_frontalface_alt.xml

进入项目目录,创建build文件夹

bash 复制代码
cd /home/ubuntu/FaceDetectArm
mkdir build
cd build
pwd
/home/ubuntu/FaceDetectArm/build

进入build文件夹, 用qmake生成makefile文件

/opt/qt5.12.10-arm/bin/qmake ..

执行make编译

make -j4

相关推荐
羊小猪~~5 小时前
【QT】-- 模型与视图简介
开发语言·数据库·c++·后端·qt·前端框架·个人开发
叶微信5 小时前
Qt相关面试题
开发语言·qt
Lhan.zzZ6 小时前
Qt开发踩坑:QList越界问题导致程序崩溃
数据库·c++·qt
不想看见4047 小时前
Qt Network 模块中的 TCP/IP 网络编程详解
网络·qt·tcp/ip
MLGDOU8 小时前
【Qt开发】信号与槽
开发语言·数据库·qt
我敲!9 小时前
Qt中用//进行中文注释可能导致意外的BUG
qt·bug
羊小猪~~9 小时前
【QT】-- QT操作数据库
数据库·qt·oracle
C++ 老炮儿的技术栈10 小时前
c++ this 指针的用途
c语言·开发语言·c++·windows·qt·github
cpp_learners1 天前
银河麒麟V10+飞腾FT-2000/4处理器+QT源码静态编译5.14.2指南
开发语言·qt
GIS阵地1 天前
QgsProviderMetadata 详解(基于 QGIS 3.40.13 API)
数据库·qt·arcgis·oracle·gis·开源软件·qgis