前言
使用qt做界面,并调用opencv、libtorch等库,有多种方式。
我尝试了以下三种方式,并成功运行:
(1) 另一篇讲的QT Creator+qmake+opencv+libtorch+realsense sdk+调用vs封装的lib库的方式
(配置opencv、libtorch和realsense sdk头文件和库,是在.pro文件,用MSVC2017 64bit编译)
(2) 另外一篇文章有讲QT Creator+CMake+opencv+libtorch+realsense sdk+调用vs封装的lib库的方式
(配置opencv、libtorch和realsense sdk头文件和库,是在CMakeList.txt文件,用MSVC2017 64bit编译)
(3) 下面讲的visual studio 2017+ QT visual studio tools+opencv+libtorch+realsense sdk+调用vs封装的lib库的方式和安装配置方法
(配置opencv、libtorch和realsense sdk头文件和库,是在项目->属性,配置包含目录、库目录、链接器等等)
一、新建项目 基于vs2017+QT VS Tools的QT工程
参考我前一篇文章,vs2017新建QT工程,
二、vs工程项目属性设置
1、项目->属性->VC++目录,设置包含目录,如下:
D:\libtorch-win-shared-with-deps-1.8.1+cpu\libtorch\include
D:\libtorch-win-shared-with-deps-1.8.1+cpu\libtorch\include\torch\csrc\api\include
D:\OpenCV\opencv-3.4.1-vc14_vc15\opencv\build\include
D:\OpenCV\opencv-3.4.1-vc14_vc15\opencv\build\include\opencv
D:\OpenCV\opencv-3.4.1-vc14_vc15\opencv\build\include\opencv2
C:\Program Files %28x86%29\Intel RealSense SDK 2.0\include
2、项目->属性->VC++目录,设置库目录,如下:
D:\libtorch-win-shared-with-deps-1.8.1+cpu\libtorch\lib
D:\OpenCV\opencv-3.4.1-vc14_vc15\opencv\build\x64\vc14\lib
C:\Program Files %28x86%29\Intel RealSense SDK 2.0\lib\x64
E:\DetectRsPro\lib
其中“E:\DetectRsPro\lib”为我原来VS工程中封装的lib库的路径。
3、项目->属性->C/C++,设置附加包含目录,如下:
4、项目->属性->C/C++,设置预处理器定义,如下:
NDEBUG
_CONSOLE
NOMINMAX
_CRT_SECURE_NO_WARNINGS
5、项目->属性->C/C++,设置语言->符合模型为否,如下:
6、项目->属性->链接器,设置链接库目录,如下:
注:在前面的VC++目录已经设置过,这里再次设置,因为之前总是遇到torch_cpu.dll无法定位的问题,找了各种办法也没有成功,今天早晨打开工程,竟然没有提示这个问题了,我也是纳闷,多设置一下,总好过找不到。
7、项目->属性->链接器,设置附加依赖项,如下:
torch_cpu.lib
c10.lib
torch.lib
opencv_world341.lib
realsense2.lib
DetectRs.lib
其中“DetectRs.lib”是我自己工程里面封装的lib库。
三、电脑系统环境变量设置
右击“此电脑”->属性->高级系统设置->环境变量->系统环境变量->path->编辑
在系统变量Path一栏编辑,添加以下路径:
D:\OpenCV\opencv-3.4.1-vc14_vc15\opencv\build\x64\vc14\bin
D:\libtorch-win-shared-with-deps-1.8.1+cpu\libtorch\lib
C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin
四、代码主要事项
1、提示头文件qcompilerdetection.h的问题,见我上一篇文章的设置
将上面有错误的一段改为:
#if defined(__cplusplus)
#if defined(__clang__)
#if QT_HAS_CPP_ATTRIBUTE(clang::fallthrough)
# define Q_FALLTHROUGH() [[clang::fallthrough]]
#endif
#elif defined(__GNUC__)
#if QT_HAS_CPP_ATTRIBUTE(gnu::fallthrough)
# define Q_FALLTHROUGH() [[gnu::fallthrough]]
#endif
#elif QT_HAS_CPP_ATTRIBUTE(fallthrough)
# define Q_FALLTHROUGH() [[fallthrough]]
#endif
#endif
2、包含libtorch中的头文件的问题
即:
将包含头文件的方式:
#include <torch/script.h>
#include <torch/torch.h>
改为:
#undef slots
#include <torch/torch.h>
#include <torch/script.h>
#define slots Q_SLOTS