QT+opencv+ffmpeg环境配置

QT5 windows

SDL音频下载:QT+SDL3-CSDN博客

资源下载【免费】:

Cmake:

cmake官网:Download CMake

cmake本地安装包4.1.2:【免费】cmake-win-x86-64.msi标准64位win4.1.2资源-CSDN下载

Opencv:

opencv官网:Releases – OpenCV

opencv本地安装4.9.0:【免费】opencv4.9.0win.exe资源-CSDN下载

opencv本地安装4.5.4:【免费】opencv4.5.4win.exe资源-CSDN下载

opencv早期版本baidu文件V3.2:OpenCV (百度云盘下载)

Ffmpeg:

ffmpeg官网:Builds – CODEX FFMPEG @ gyan.dev       【有点慢但是还能下】

ffmpeg本地安装8.0:【免费】ffmpge8.0用于二次开发资源-CSDN下载

目录:

资源下载【免费】:

官网下载教程:

安装教程:

opencv生成编译文件

配置构建系统

编译生成.obj文件

安装 方便其他程序使用开发

配置环境变量

ffmpeg生成编译文件

配置环境变量

检查版本

拷贝到项目

Qt 导入ffmepg

Qt 导入opencv

打包与运行

静态库与动态库区别讲解:

关于收费问题:


官网下载教程:

CMake:

opencv:

lib ->release -> 选版本4.12.0为例 window

ffmpeg:

安装教程:

cmake 点击 .msi安装

opencv点击exe选择路径提取extract如下文件

opencv生成编译文件

配置构建系统

第一步:准备“厨房”和“食材

D:/opt/qt/OpenCV/opencv/sources

D:/opt/qt/OpenCV/opencv/opencv-build

完成上图后,点击configure.
选择MinGW Makefile和“Specify native compilers”->next.

D:/opt/qt/qtinstall/QT512/Tools/mingw810_64/bin/gcc.exe

D:/opt/qt/qtinstall/QT512/Tools/mingw810_64/bin/g++.exe

-点击finish,会自动构建。
       构建完成后,在界面红勾选“WITH_1394”, “WITH_OPENGL”, “WITH_QT”, “WITH_OPENMP” ,点击configure,完成后,标红的部分基本已经消失。

后续通过entry手动添加就行

1. Qt配置问题


# 需要手动设置Qt路径


QT_QMAKE_EXECUTABLE: D:/Qt/5.15.2/msvc2019_64/bin/qmake.exe Qt5_DIR: D:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5

解决方法

点击”Add Entry”按钮添加以下变量:

变量名:
CMAKE_PREFIX_PATH

变量值:
D:/Qt/5.15.2/msvc2019_64/lib/cmake

generate 生成makefile,点击generate。

编译生成
.obj
文件

打开Power shell
进入E:libopencvopencv-build路径下,运行mingw32-make -j 4 (-j 线程数查看自己处理器的线程数,提高编译速度)



cd d:
D:> cd D:optqtOpenCVopencvopencv-build
D:optqtOpenCVopencvopencv-build> mingw32-make -j 4

不出错的话,完成运行后运行mingw32-make install完成安装。

安装 方便其他程序使用开发


PS D:optqtOpenCVopencvopencv-build> mingw32-make install

配置环境变量

进入install找到如下图所示路径添加到环境变量,重启电脑。 win+r  sysdm.cpl


D:optqtOpenCVopencvopencv-buildinstallx64mingwin

ffmpeg生成编译文件

从官网解压的包含  full-build-shared  可以进行二次开发

配置环境变量

   win+r  sysdm.cpl


D:optqtffmpegffmpeg-7.0.2-full_buildin

检查版本

cmd,输入ffmpeg -version 如下所示:


ffmpeg -version

拷贝到项目

bin下的所有dll拷贝到项目的debug下,include和lib文件夹全拷贝到项目下

Qt 导入ffmepg

ffmpeg8.0动态链接相关文件,直接放在项目中资源-CSDN下载

这里选择动态库,将解压后的ffmpeg 目录下include和bin目录放置在自己的工程目录。

.pro 文件导入:



# FFmpeg 配置
INCLUDEPATH += $$PWD/include
# 链接库测试
LIBS += $$PWD/avcodec-62.dll  
        $$PWD/avformat-62.dll 
        $$PWD/avutil-60.dll 
        $$PWD/swscale-9.dll

Qt 导入opencv

opencv4.9.0编译后的代码,直接引入项目资源-CSDN下载

.pro文件导入



#opencv
INCLUDEPATH += D:optqtOpenCVopencvopencv-buildinstallinclude
LIBS += D:optqtOpenCVopencvopencv-buildliblibopencv_*.a

测试程序:

.pro添加



# FFmpeg 配置
INCLUDEPATH += $$PWD/include
# 链接库测试
LIBS += $$PWD/avcodec-62.dll  
        $$PWD/avformat-62.dll 
        $$PWD/avutil-60.dll 
        $$PWD/swscale-9.dll
 
#opencv
INCLUDEPATH += D:optqtOpenCVopencvopencv-buildinstallinclude
LIBS += D:optqtOpenCVopencvopencv-buildliblibopencv_*.a
 
 
# 确保 DLL 文件在运行时可用
# win32 {
#     # 复制 DLL 文件到构建目录
#     for(dll, avcodec-62.dll avdevice-62.dll avfilter-11.dll avformat-62.dll avutil-60.dll swresample-6.dll swscale-9.dll) {
#         QMAKE_POST_LINK += $$QMAKE_COPY $$shell_path($$PWD/$$dll) $$shell_path($$OUT_PWD) $$escape_expand(nt)
#     }
# }
 

mainwindow.h 添加



public:
    void testFFmpeg();
    void testOpenCV();

mainwindow.cpp 添加

调试,并生成两张图片(一个是imshow一个是通过qlabel)



#include "mainwindow.h"
#include "ui_mainwindow.h"
 
#include <QDebug>
 
/**ffmpeg**/
extern "C"
{
#include <libavcodec/avcodec.h>    // 在头文件包含 - 是否正确?
#include <libavformat/avformat.h>  // 在头文件包含 - 是否正确?
}
 
/**opencv**/
#include <opencv2/opencv.hpp>
 
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::testFFmpeg()
{
    qDebug() << "=== FFmpeg 测试 ===";
    qDebug() << "avcodec 版本:" << avcodec_version();
    qDebug() << "avformat 版本:" << avformat_version();
 
    const char* version = av_version_info();
    if (version) {
         qDebug() << "FFmpeg 版本:" << version;
     }
}
 
void MainWindow::testOpenCV()
{
    qDebug() << "开始测试 OpenCV...";
 
    // 方法1:打印版本信息
    qDebug() << "OpenCV 版本:" << CV_VERSION;
 
    // 方法2:尝试读取并显示一张图片(更彻底的测试)
    // 注意:你需要准备一张名为 "test.jpg" 的图片放在程序的工作目录下
    // 或者使用绝对路径,例如 "C:/Users/YourName/Pictures/test.jpg"
    cv::Mat image = cv::imread("D:/download/WrongIcon.jpg");
 
    if (image.empty()) {
        qDebug() << "错误:无法加载图片 'test.jpg'!请检查文件路径。";
        // 即使图片加载失败,只要能执行到这里,也说明库链接成功了
        qDebug() << "但 OpenCV 库链接成功!";
    } else {
        qDebug() << "图片加载成功,尺寸:" << image.cols << "x" << image.rows;
        // 尝试显示图片(可选,如果是在控制台程序,可能需要GUI支持)
        cv::imshow("OpenCV Test Window", image);
        cv::waitKey(0); // 等待按键
        // cv::destroyAllWindows();
        qDebug() << "OpenCV 测试完全通过!";
    }
 
    // 将 BGR 转换为 RGB(OpenCV 使用 BGR,Qt 使用 RGB)
    cv::Mat rgbImage;
    cv::cvtColor(image, rgbImage, cv::COLOR_BGR2RGB);
 
    // 将 cv::Mat 转换为 QImage
    QImage qimg(rgbImage.data,
                rgbImage.cols,
                rgbImage.rows,
                rgbImage.step,
                QImage::Format_RGB888);
 
    // 将 QImage 转换为 QPixmap 并显示在 QLabel 中
    QPixmap pixmap = QPixmap::fromImage(qimg);
 
    ui->imageLabel->setPixmap(pixmap);
    ui->imageLabel->setAlignment(Qt::AlignCenter);
 
    qDebug() << "OpenCV 测试完全通过!图片已显示在界面中。";
}

main.cpp



#include "mainwindow.h"
 
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.testFFmpeg();
    w.testOpenCV();
    w.show();
    return a.exec();
}

测试通过:

打包与运行

静态库与动态库区别讲解:

静态链接库与动态链接库-CSDN博客

关于收费问题:

本说明来自CSDN博客NarutoInspire
使用 LGPL 协议开发闭源程序,如果你使用动态链接的形式,那么,你可以以任何形式发布你的应用程序,商业的、非商业的、开源的、非开源的,随你。如果你因某种原因必须静态链接一个基于 LGPL 协议发布的库(一下我们简称为 LGPL 库),那么,你有义务进行下面的工作:

1.你必须在你的文档中说明,你的程序中使用了 LGPL 库,并且说明这个库是基于 LGPL 发布的;
2.你必须在你的应用程序发布中包含一份 LGPL协议,通常就是那个文本文件;
3.你必须开放使用了 LGPL 库代码的所有代码,例如某些封装器。但是,其他使用这些封装器的代码就不需要开放了;
4.你必须包含你的应用程序的余下部分的目标文件(通常就是我们所说的 .o 等等),或者是其他等价的文件。源代码并不是必须的。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
Szh____的头像 - 宋马
评论 抢沙发

请登录后发表评论

    暂无评论内容