QT配置opencv并打包发布

QT配置opencv并打包发布

  • QT配置opencv
    • (一)软件环境
    • (二)配置OpenCV的MinGW版
    • (三)配置CMake
    • (四)编译 OpenCV
    • (五)编译opencv常见错误
    • (六)配置Qt中的OpenCV
  • 打包发布

QT配置opencv

(一)软件环境

Windows10
QT-5.10.1
CMake-3.18.4
OpenCV-3.4.0(建议用3系列)
Depends(下载地址:http://www.dependencywalker.com/)
Enigma Virtual Box(下载地址:https://enigmaprotector.com/en/downloads.html)

(二)配置OpenCV的MinGW版

由于Opencv没有编译好的MinGW版,因此需要利用Cmake进行编译。
安装好后打开QtCreator,在工具 -> 选项 -> 构建和运行 -> 构建套件,选中Desktop Qt 5.10.1 MinGW 32bit,设为默认,OK。
添加 CMake、MinGW 到环境变量:

D:\QT\Qt5.10.1\Tools\mingw530_32\bin
D:\QT\Qt5.10.1\5.10.1\mingw53_32\bin
D:\cmake-3.18.4-win64-x64\bin

(三)配置CMake

打开cmake-gui.exe

打开 cmake-gui,设置源码和生成路径:

Where is the source code: D:/opencv3.4/opencv/sources
Where to build the binaries: D:/opencv3.4/opencv/build-QT

点击 Configure,设置编译器
Specify the generator for this project: MinGW Makefiles
Specify native compilers
Next
Compilers C: D:\QT\Qt5.10.1\Tools\mingw530_32\bin\gcc.exe
Compilers C++: D:\QT\Qt5.10.1\Tools\mingw530_32\bin\g++.exe
Finish

编译配置:
勾选 WITH_QT
勾选 WITH_OPENGL
点击 Configure,再次配置:
不勾选 WITH_IPP
设置 QT_MAKE_EXECUTABLE 为 D:\QT\Qt5.10.1\5.10.1\mingw53_32\bin\qmake.exe
设置 Qt5Concurrent_DIR 为 D:\QT\Qt5.10.1\5.10.1\mingw53_32\lib\cmake\Qt5Concurrent
设置 Qt5Core_DIR 为 D:\QT\Qt5.10.1\5.10.1\mingw53_32\lib\cmake\Qt5Core
设置 Qt5Gui_DIR 为 D:\QT\Qt5.10.1\5.10.1\mingw53_32\lib\cmake\Qt5Gui
设置 Qt5Test_DIR 为 D:\QT\Qt5.10.1\5.10.1\mingw53_32\lib\cmake\Qt5Test
设置 Qt5Widgets_DIR 为 D:\QT\Qt5.10.1\5.10.1\mingw53_32\lib\cmake\Qt5Widgets
设置 Qt5OpenGL_DIR 为 D:\QT\Qt5.10.1\5.10.1\mingw53_32\lib\cmake\Qt5OpenGL
设置 CMAKE_BUILD_TYPE 为 Release 或者 RelWithDebInfo

【注:若没有QT_MAKE_EXECUTABLE,可以自己Add Entry,再将qmake的路径添加进去】

点击 Generate 生成 Makefile

(四)编译 OpenCV

打开终端进行编译:cd D:\opencv3.4\opencv\build-QT

输入【mingw32-make】命令,若没有错误,则再次输入【mingw32-make install】,完成安装。

添加新生成的bin到Path环境变量:把编译后,目标目录下的bin目录路径,即
D:\opencv3.4\opencv\build-QT\bin 添加到Path环境变量中。
QT配置opencv并打包发布_第1张图片

(五)编译opencv常见错误

  • RC错误
    QT配置opencv并打包发布_第2张图片
    【解决】
    在 cmake-gui 编译配置中:
    不勾选 ENABLE_PRECOMPILED_HEADERS
    然后重新 Configure-Generate-mingw32-make

  • sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA 错误
    QT配置opencv并打包发布_第3张图片
    【解决】
    修改D:\opencv3.4\opencv\sources\modules\videoio\src\cap_dshow.cpp文件,在#include "DShow.h"这行的上面加一行#define NO_DSHOW_STRSAFE,如:
    #define NO_DSHOW_STRSAFE
    #include “DShow.h”
    然后重新 Configure-Generate-mingw32-make

  • identifier ‘nullptr’ is a keyword in C++11 错误
    QT配置opencv并打包发布_第4张图片
    【解决】
    在 cmake-gui 编译配置中:
    勾选 ENABLE_CXX11
    然后重新 Configure-Generate-mingw32-make

  • Ananconoda冲突
    [98%] Built target gen_opencv_python_source
    Scanning dependencies of target opencv_python3
    [98%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.obj
    [ 98%] Linking CXX shared module …\lib\python3\cv2.cp37-win_amd64.pyd
    F:/Anaconda/python37.dll: file not recognized: File format not recognized
    collect2.exe: error: ld returned 1 exit status
    modules\python3\CMakeFiles\opencv_python3.dir\build.make: 100:recipe for target ‘lib/python3/cv2.cp37-win_amd64.pyd’ failed
    mingw32-make[2]: *** [lib/python3/cv2.cp37-win_amd64.pyd] Error 1
    CMakeFiles\Makefile2:6798: recipe for target ‘modules/python3/CMakeFiles/opencv_python3.dir/all’ failed
    mingw32-make[1]: *** [modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2
    Makefile:161: recipe for target ‘all’ failed
    mingw32-make: *** [all] Error 2
    【解决】
    由于本人之前电脑装了Anaconda,所以在cmake进行configure之后总是自动检测到python路径并且为其自动build了python的opencv链接,所以后面我取消选中一切关于python的选项。
    QT配置opencv并打包发布_第5张图片

(六)配置Qt中的OpenCV

新建项目后,在.pro文件中的底部,添加如下内容:

INCLUDEPATH += D:\opencv3.4\opencv\build\include
D:\opencv3.4\opencv\build\include\opencv
D:\opencv3.4\opencv\build\include\opencv2

LIBS += D:\opencv3.4\opencv\build-QT\lib\libopencv_*.a

QT配置opencv并打包发布_第6张图片
到此为止,Qt和opencv配置成功。以后在Qt中编写opencv程序,每次新建项目时,都要在.pro文件中添加上一步的内容。

打包发布

QT配置opencv并打包发布_第7张图片
用Qt creator 打开项目文件,然后release,生产release版的可执行文件,同时查看编译工具,后续需要用统一编译器才不会出错。
QT配置opencv并打包发布_第8张图片
将文件夹
build-Japan-CrackDetection-Program-Desktop_Qt_5_10_1_MinGW_32bit-Release–>release–>Japan-CrackDetection-Program.exe拷贝到一个新建文件夹Japan中(该文件夹中不能有中文路径)。
从Windows图标找到Qt软件,选择和第一步3里面一样的编译器。
QT配置opencv并打包发布_第9张图片
打开后,转至Japan文件夹,输入windeployqt Japan-CrackDetection-Program.exe
QT配置opencv并打包发布_第10张图片
运行后的Japan文件夹添加了很多依赖项。
QT配置opencv并打包发布_第11张图片
直接把Japan-CrackDetection-Program.exe拖到Depends软件中即可(在Depends中只显示依赖项的一级目录)。

QT配置opencv并打包发布_第12张图片
可以看到我们使用了opencv的两个依赖项,分别是libopencv_core340.dll和libopencv_imgproc340.dll。下一步把这些依赖从opncvbuild(也就是在对Qt配置opencv时用cmake对opencv编译之后形成的文件)在bin中将这两个依赖项加入到Japan中即可。

打开Enigma Virtual Box软件:
QT配置opencv并打包发布_第13张图片

  1. 点击Browse选择Japan里面的.exe文件
  2. 点击Add将整个Japan文件加进去(第二个选项)
  3. 点击Files Options
    QT配置opencv并打包发布_第14张图片
  4. 点击 Process,运行完成后点击run就可以运行程序了,同时你的test文件夹里面多了一个Japan-CrackDetection-Program_boxed.exe文件,这个就可以直接运行了。

你可能感兴趣的:(C++与Python,qt,opencv)