Windows平台下 QT5.12.10 + OpenCV3.4.10 + Opencv_contrib安装与编译

最近一个月一直在配置环境......安装QT、编译OpenCV,在ARM上装,在电脑上装,过程太煎熬了,翻了无数个网站,遇到了N个不知名bug......

写下这篇博客,总结一下今天的“血泪史”,也想告诉大家,配置环境特别需要耐心,一定不要泄气,多查一查博客,多找一找他人的总结,最后一定会成功的,实在不行就重新再来一遍(手动doge)  希望我的这篇总结也可以帮助到大家。


后续:(万万没想到,还会有后续......)

简述本人安装和编译opencv的过程 :

ARM板opencv + QT 环境配置:

 第1次,在ubuntu上装,发现版本没装对,重来;第2次安装,由于之前在ubuntu系统上先装了QT后装了opencv,编译器版本发生冲突,ARM板刷机重来;第3次安装,从安装固件-->编译opencv-->安装QT,重新来过,ARM上的编译环境终于配置完成!

Windows系统opencv 编译:

Windows系统上编译了两个版本的opencv, 一种使用VS编译,一种使用MingW编译(用于QT),过程是这个样子的:

为了测试仿真程序,首先编译了VS版本的opencv,仿真程序顺利跑通;

使用mingw编译opencv,编译后配置环境,可以正常读取图片并显示,这一步我以为我的opencv编译好了,但是坑还在后面;

开始尝试写实时读取摄像机视频流的程序,发现VideoCapture cap(0) isOpened()函数始终返回false,即视频流始终打开失败,后来将相同的程序在ARM上进行测试,发现可以正常运行,初步断定,我的Windows下的opencv编译失败,于是重新来过;

再次编译时,发现configure时确实有报错,之前一直被我误认为是warning,忽略了,后来解决了这些问题(具体如何解决的,我会在正文中介绍),视频流可以正常读取了,这一次我以为opencv再也不会出问题了吧,结果当我开始尝试移植算法时,很不幸,又一次编译不通过,于是我重复之前的过程,将相同的程序放在ARM上编译,发现编译通过,于是,又一次断定是opencv的编译出现了问题;

第N次尝试编译opencv,好在有了之前的经验积累,这一次编译过程还比较顺利(如果还是各种Bug我真的要“疯掉”了),编译后对相同的程序进行编译,发现顺利通过,可以开始移植算法了。

NNNN......次编译opencv,心态从懵逼到不解到爆炸,到现在觉得这东西真是有点意思:)  编译环境这一过程真的很像小时候玩经典版的超级玛丽,以为自己见到胜利的曙光了,却不知道自己下一步是被乌龟撞死还是被火球喷死,一切都等重头来过,这趟“浑水”趟过去了,心态真的佛系。

这篇博客就总结了我在windows环境下,使用mingw编译opencv的通关秘籍血泪史,希望对今后的自己、对看到这篇博客的你有所帮助。


一、环境说明

Win10 64位系统

QT 5.12.10

CMake 3.19.2

OpenCV 3.4.10

Opencv_contrib 3.4.10

二、QT下载与安装

下载链接:https://www.qt.io/download-qt-installer 

进入QT官网,点击右上方 Download Try,点击Try Qt模块下的 Download Qt now,填写注册信息后进入下载界面,如图1所示。

这里不要直接点击Download,这里下载的Qt Online Installer是在线安装,安装不方便。

我们直接下拉界面,点击 offline packages you can get them here,进入图2所示界面 

                                                                                                                                                                                                               图1 QT下载

                                                                                                                  图2 下载QT离线安装包

 

点击链接即可直接下载安装包:qt-opensource-windows-x86-5.12.10.exe

后续安装步骤参考:https://blog.csdn.net/weixin_42322013/article/details/88808230?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.control

(因为我这里之后需要和ARM进行联调,所以也只安装了MingW编译组件。)

三、Cmake 安装

Cmake下载链接:https://cmake.org/download/

                                                                 图3  Cmake下载

安装步骤参考:https://blog.csdn.net/weixin_42322013/article/details/88808230?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.control

四、Opencv安装

OpenCV下载链接:https://opencv.org/releases/

因为我这里用到了opencv的附加模块,所以需要另外下载opencv_contrib, opencv_contrib的版本需要与opencv的版本一致。

opencv_contrib下载链接:https://github.com/opencv/opencv_contrib/releases

opencv与opencv_contrib下载完成后,解压至某指定文件夹,将opencv_contrib文件夹拷贝至opencv文件夹下。


至此,我们需要安装的都已经安装完成,下一步是配置环境变量。

  • 右击 此电脑
  • 点击属性
  • 点击 高级系统设置
  • 点击 环境变量
  • 选择 系统变量 中的 Path
  • 点击 编辑
  • 点击新建,按照自己安装QT的路径,添加图4所示两条路径

                               

                                        图4 配置QT路径


接下来,是最重要也是最“玄学”的一步,编译OpenCV.

五、编译OpenCV

参考链接:https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows

第一步:双击cmake-gui,进入图5所示界面。

更新 Where is the source code: 与 Where to build binaries: 后面的路径,分别选择opencv文件夹下的source和build文件夹。

                                                                                              图5 选择编译路径

第二步:选择编译器

在这里插入图片描述

第三步:配置编译器路径

C:  E:\QT\Tools\mingw730_64\bin\gcc.exe

C++: E:\QT\Tools\mingw730_64\bin\g++.exe

Fortran:不需要填写

在这里插入图片描述

第四步:设置QT5_DIR路径

第五步:设置 OPENCV_EXTRA_MODULES_PATH 为 “opencv_contrib/modules"所在路径(不要复制,在cmake界面选择"opencv_contrib/modules"文件夹,让其自动生成路径)

第六步:勾选 "OPENCV_ENABLE_NONFREE"(参考链接:https://blog.csdn.net/weixin_42920501/article/details/103798468)(如果使用sift算子一定要勾选该选项)

  • 设置QT5_DIR路径为:E:\QT\5.12.10\mingw73_64\lib\cmake\Qt5
  • 勾选 WITH_QT , WITH_OPENGL
  • 取消勾选 ENABLE_PRECOMPILED_HEADERS
  • 点击 “Add Entry" 添加  OPENCV_VS_VERSIONINFO_SKIP = 1(Value √)
  • 设置 OPENCV_EXTRA_MODULES_PATH 为 “opencv_contrib/modules"所在路径
  • 勾选 OPENCV_ENABLE_NONFREE

第五步:构建并生成

分别点击cmake-gui界面下的 Configure 与 Generate

第六步:编译OpenCV

完成上述步骤后,opencv文件夹下多出opencv-build文件夹

cd opencv_build

mingw32-make -j 8

// 编译完成后,进行安装

mingw32-make install

至此,编译与安装OpenCV任务完成。

六、如何在QT中配置OpenCV?

 在opencv文件夹下新建名为“opencv.pri”的文件,在文件夹中添加以下内容:

INCLUDEPATH += D:\opencv\opencv\opencv_build\install\include
LIBS += D:\opencv\opencv\opencv_build\lib\libopencv_*.a

之后每新建一个工程,需要在.PRO文件最后添加语句:

include(D:/opencv3.4.10/opencv.pri)

七、补充编译过程中可能遇到的问题

7.1 使用CMake configure过程中报错

(这一步报错可以解释为什么我最初编译的opencv不能读取视频流,ffmpeg未编译成功。

ffmpeg的功能:(1)视频采集,(2)视频格式转换,(3)视频截取,(4)视频添加水印。

之所以在configure的过程中报错是因为我没有连外网,这些文件的下载链接打不开,其不能自行下载,所以解决的办法就是自行去github上下载。

此问题的解决方案:

1. 自行下载文件的github网站

https://github.com/opencv/opencv_3rdparty

2. 在branch中按照文件名搜索对应版本的文件并下载

3. 在本地查询下载文件的MD5码,查询方式:

cd /d [DownloadDir]      # [Download]为下载文件的路径

certutil -hashfile [filename] MD5   # [filename] 为待查询文件名

4. 若MD5码与.cache文件夹下文件的MD5码不一致,则需更改.cmake文件,更改方式:

# fmepg为例

cd /d  [path]/opencv/3rdparty/ffmepg    # [path]为opencv本机保存路径

打开文件夹下的ffmpeg.cmake文件

在.cmake文件中找到语句 

ocv_update(FFMPEG_BINARIES_COMMIT "……")

ocv_update(FFMPEG_FILE_HASH_BIN32 "……")

ocv_update(FFMPEG_FILE_HASH_BIN64 "……")

ocv_update(FFMPEG_FILE_HASH_CMAKE "……")

将""内的内容替换为对应的自行下载文件的MD5码,并保存.cmake文件

5. 重新configure即可。

参考博客:

下载ffmepg文件

https://blog.csdn.net/qq_34801642/article/details/105577349

https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20191018

https://blog.csdn.net/yiyuehuan/article/details/52951574

查询文件的MD5号,更新.cmake文件

https://blog.csdn.net/pyt1234567890/article/details/106525475/

7.2 编译过程中报错

解决方案

手动编译生成文件
打开 \build\modules\core\CMakeFiles\opencv_core.dir\build.make 文件,并定位至 1508行
按照提示,进入对应文件夹,使用mingw32编译并生成文件
 
这一步之后,问题并没有按照预期解决,出现了 自己生成的文件不能被编译的错误 “…… is incompatible with i386:x86-64 output
解决方法
使用CMake configure时,点击“Add Entry” OPENCV_VS_VERSIONINFO_SKIP=1 (Value √)
 
使用QT进行测试时,出现 “找不到“cuda,hpp”文件”
解决方法
将文件夹 D:\opencv_mingw\opencv-3.4.10\opencv_contrib\modules\xfeatures2d\include\opencv2\xfeatures2d
拷贝至  D:\opencv_mingw\opencv-3.4.10\build\install\include\opencv2 文件夹下
 
以上,我在编译opencv过程中踩过的坑,如果大家可以连外网,那么按照前六节的步骤编译就可以正常使用,如果不能连外网,在第一次configure 报错后,按照7.1节的内容手动下载文件并更改MD5码后,也可以正常编译并生成。
至于7.2节的内容,我在windows上编译了3次opencv,这种情况只遇到了一次,最近一次编译也没有遇到,可能这一步报错与我使用CMake configure时 缺省了“ 点击“Add Entry” OPENCV_VS_VERSIONINFO_SKIP=1 (Value √)”这一步导致的。

八、总结

安装部分参考:https://blog.csdn.net/weixin_42322013/article/details/88808230?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.control

但从编译部分开始,一定要参考:https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows

第一篇博客给出的cmake-gui部分介绍不全面,包括设置“QT5_DIR”和“取消勾选 ENABLE_PRECOMPILED_HEADERS”

所以在编译的过程中遇到了很多错误,也有的博客提到 “取消勾选 WITH_IPP”,如果编译出错,可以试一下。

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值