OpenCV4.9.0 + 扩展 + WITH_QT(Qt6)模块编译教程(Windows)

本篇教程是Opencv4.9.0 和 扩展Opencv Contrib4.x以及带上了WITH_QT选项的CMake编译环境配置和编译教程。注意到环境是Window11(10应该仍可以使用)。本篇教程将会导出Mingw版本的,和MSVC19版本的Debug和Release四套Opencv库的编译教程。各位读者可以根据自己的需求进行编译,或者是在本文最后的部分前往本人开设的Github仓库处下载已经编译好的资源和库直接进行使用。

前置的能力要求与说明

  1. 本教程要求自己至少会翻墙,不会翻墙的话就不建议费心自己编译了,文章的最后有仓库直接嫖,当然如果是的确需要存在自己的编译需求的话,可以查询如何瞒过CMake的下载步骤(也就是贴MD5码瞒天过海),替换自己的下载的资源从而使得CMake正确的生成MakeFile。

  2. 以及本教程需要提示您:本教程不生成opencvWorld这个巨无霸,因为他跟Contrib库的cvv可视化相互冲突,会存在依赖错配的问题导致大量的undefined reference,后续的配置不需要cvv者可以不配置然后选择build_opencv_world,如果需要的话就只好忍耐生成大量的散装库了

  3. 教程的配置顺序优先是Release,这点务必注意。

需要下载的资源

  1. Opencv4.9.0 :> opencv/opencv at 4.9.0 (github.com)

git clone https://github.com/opencv/opencv.git
  1. Opencv_Contrib4.x :> opencv/opencv_contrib: Repository for OpenCV's extra modules (github.com)

    git clone https://github.com/opencv/opencv_contrib.git
  2. Qt:Try Qt | 开发应用程序和嵌入式系统 | Qt直接下就行,但是先不要急着下啥组件,我后面会说。

在网页Web和Windows Command命令行(我喜欢用Powershell,这个因人而异)中分别完成上述三个资源的下载。

TIPS:如果你发现git被墙的厉害,可以使用代理工具配置IP和端口转发流量。这个需要查看你使用的代理软件(不会使用代理软件的话自行百度买节点,这里就不赘述怎么搞了),我的代理软件生成的Powershell的代理设置指令是:(注!意!改!成!自!己!的!转!发!IP!和!端!口!

$Env:http_proxy="http://127.0.0.1:7890";$Env:https_proxy="http://127.0.0.1:7890"

惯用CMD用户可以根据自己的需求更改IP和端口

set http_proxy=http://127.0.0.1:7890 & set https_proxy=http://127.0.0.1:7890

下载的时候记得泡杯茶喝喝。最近的话本人这里的网不太好,常常会丢包,多来几次就可以下载完整。两个包都比较大(Contrib包200多MB,Opencv本身的包达到了700多MB)

下载结束,开始配置。

配置编译器(WITH_QT用户看这个)

下一步就是配置了,我们首先搞Qt的,我们特别需要注意的是,这篇教程的这个部分更加针对Qt6,Opencv的CMakeLists在这个版本中支持了Qt6,当然,选择Qt5也是可行的,事情更少。

Qt6用户在使用安装程序的时候需!要!注!意!请务必保证自己的安装中包含了下面的这些包:

编译器包,这里根据自己希望的平台二选一,或者都选!

另一方面,这里是Qt6用户务必保证的:

这个是需要的,兼容Qt5的库包是一定要下载的!否则会在后续的配置中出现这个错误,

error: Qt6::Core5Compat but the target was not found.

类比的,他报了少啥关于Qt的,就在这里下啥!一定一定要补全!否则编译不通过!

Qt5用户不需要管这个。

下一步就是添加路径:

重点是lib库的路径,我们CMakeLists搜包需要这个文件下面的cmakeConfigFile。这也就提醒你:

如!果!你!是!两!种!库!都!编!译!请确保对应编译器的Lib路径是要被优先搜索到的!换而言之,保证你的lib库路径在Path里的头部!

赶时间不看,我说原因:这是因为我们的后面的编译种会涉及到库的连接,如果我们在配置Mingw的库却使用了MSVC下的lib的库,两种库的导出符号的命名规则完全不一致,将会出现大名鼎鼎的Undifined Reference错误,而其是刷屏级别的。

按照这个架势,我们就是先处理Mingw的库了。

为CMakeLists设置代理

Opencv在Config的流程种会出现下载库的情况,对于原生的Opencv会下载FFMPEG等库,为此,如果你手头有代理软件,请为CMake设置代理,在CMakeLists的首部添加:

set(ENV{http_proxy} "http://127.0.0.1:7890")
set(ENV{https_proxy} "http://127.0.0.1:7890")

别直接复制啊,看自己的IP和端口号

保存,打开CMake-Gui,开始配置。

CMake 3.24配置(Mingw Release)

推介使用CMake3.24而不是3.25,我先前使用会出现一个资源死活识别不出来然后发现是牛马的CMake的问题(Github Issue可以围观一手)

我们添上对应的路径,看自己的:(然后建议像我这样勾上Advanced和Grouped方便等会找问题)

开始Configure,我们既然使用Mingw编译器,自然要的是Mingw-MakeFile,下一步就是使用指定的gcc和g++编译器。

可以参考位置看看自己的gcc和g++在哪里。

确认,CMake开始扫描,检查编译条件。这个过程将会持续的很久,也会出现大量的有趣的错误。请随时留意自己的输出控制台有没有出现红色的东西。而不是不负责任的一直点Configure让错误失踪

这里就是让很多新手绊倒的地方,当我们完成CMake的代理配置后,可以发现这里不会报错,而是顺利的通过配置

第一次配置结束,可以看到满山红。

  1. 检查自己的Install to,是你希望的路径吗?

  2. 回看自己的 Configure过程出现过爆红吗,有的话可以点对点的找问题解决,笔者这里尚未出现,常见的可能的就是不设置代理导致必须存在的库没有被下载,这个网上已经存在大量的教程教你,这里不再演示!

配置自己的需求然后生成MakeFile

配置Contrib

回忆我们的需求,我们要的是opencv_contrib + WITH_QT。所以第一步就是设置Opencv的Contrib路径

输入自己的conrtib/module路径。

配置Qt(很重要,极易出现问题)

勾选WITH_QT选项。

再次Config观察输出台

由于多出了Contrib库,还会下载不少的文件

文件也都比较大,考验流量。所以容易失败。

配置结束,控制台没有出现红色的部分。检查上面的栏目,对于我们当前的配置需求我们只检查qt的就行。

OK,都是我们指定的路径,没问题。

再次Config消红

很干净,没问题了。

生成MakeFile。结束CMake的配置部分。

现在可以看到Opencv的build目录下文件丰富多彩,所以打开你的命令控制台,走一个

mingw32-make.exe -j14

启动我们的编译。(注意:-j几看自己的机器,不然会出现部分线程超前编译的错误,导致出现未定义的错误。)

路上会出现很多的编译信息。

如果发生了错误,自行百度emmm,我第一次编译出现了字符编码转化的问题,当然这个自己修修也就OK了。

单刷成功。

下载库:

mingw32-make.exe install

整理文件,实际上我们用到的就是这些:

.\build\install\x64\mingw

下的bin和lib路径下的动态库和静态库和

.\build\install\include\opencv2

带着opencv2一块走记得。

Mingw Debug版本

MingW debug版本有一个需要注意的:就是在上面配置的基础上修改buildType和buildFlag。如你所见:

首先:CMAKE_BUILD_TYPE:改成DEBUG的类型。其次:

CMAKE_CXX_FLAGS_DEBUG的falgs那里改成-g O1,这是因为我们的编译的过程会产生大量的比较大的目标文件,一部分的目标文件体积过大导致无法被连接,我们不得不妥协一部分编译信息来保证我们的Debug库会被正确编译。

没了,继续单走mingw32-make.exe -j14mingw32-make.exe install

老地方取库和头文件,这里不赘述了。

MSVC Version

在开始我们的MSVC版本的配置之前,请务必保证:

自己的PATH下关于Qt库的路径下是MSVC优先

我们的第一个与Mingw的分歧点在于,我们需要更改为指定MSVC编译器进行编译,为此就需要使用Visual Studio的MSVC生成编译工程

请诸位读者自行选择自己的主机上存在的VS版本。然后配置即可:

笔者这里采用的是MSVC17(Visual Studio 2022版本)进行编译的。对于中间的下载文件的配置要求跟Mingw的完全一致,这里还是一样:注意开好自己的代理,仍然存在不同于Mingw的文件需要下载。

  1. 检查自己的Install to,是你希望的路径吗?

  2. 回看自己的 Configure过程出现过爆红吗,有的话可以点对点的找问题解决,笔者这里尚未出现,常见的可能的就是不设置代理导致必须存在的库没有被下载,这个网上已经存在大量的教程教你,这里不再演示!

配置自己的需求然后生成sln文件

配置Contrib

回忆我们的需求,我们要的是opencv_contrib + WITH_QT。所以第一步就是设置Opencv的Contrib路径

输入自己的conrtib/module路径。

配置Qt(很重要,极易出现问题)

勾选WITH_QT选项。(看准是MSVC的)

再次Config观察输出台

由于多出了Contrib库,还会下载不少的文件

文件也都比较大,考验流量。所以容易失败。

配置结束,控制台没有出现红色的部分。检查上面的栏目,对于我们当前的配置需求我们只检查qt的就行。

OK,都是我们指定的路径,没问题。

再次Config消红

很干净,没问题了。然后Generate Done。

回到build目录:

抓到这个目录,点击打开工程

第一件事情:确保是Release,第二件事情,点击生成->生成解决方案。

一般而言会出现失败0个,如果不是,仔细检查一下输出哪里有问题,可以自己打补丁,也可以自己重新配置(比如说我第一次配置遇到了TIF库的内部参数大小没被设置,自己手动补上的=_=,这次写博客配置的就很顺利)

下一步就是下载:找到这个地方,对着Install目录项右键生成配置方案,完事之后还是老地方取东西

MSVC Debug

我们类比的把CMakeLists的build type改成了DEBUG,然后注意在生成的时候需要选择DEBUG模式的生成,否则会产生生成和配置不符合的问题。当然后面就是雷同了。

最后给出自己的编译库的地址:

百度:百度网盘 请输入提取码 提取码:a8a0

为什么没有github呢?因为LFS超了...试图不用LFS也发现网的问题导致每一次都出现了严重的verify失败和丢包的情况,导致处理了几个小时也没有搞定。

等到啥时候搞好了补上github的地址

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值