QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置

QT Creator +cmake+MSVC2017 64bit Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置

文章目录

    • 前言:
  • 一、QT、CMake、libtorch安装配置
    • 1、QT安装
    • 2、安装CMake
    • 3、libtorch安装配置
    • 4、CDB调试工具下载
    • 5、opencv安装和realsense sdk安装
  • 二、新建QT工程
  • 三、qt creator下配置libtorch
    • 1、CMakeLists.txt文件
    • 2、在mainwindow.cpp中添加libtorch的头文件:
    • 3、运行项目,成功:
  • 四、qt creator下配置opencv
    • 1、CMakeLists.txt文件
    • 2、在mainwindow.cpp中添加opencv的头文件:
    • 3、运行项目,成功:
  • 五、qt creator下配置realsense SDK
    • 1、CMakeLists.txt文件
    • 2、添加头文件
    • 3、编辑控件
    • 4、编辑mainwindow.cpp代码
    • 5、运行项目
  • 六、qt creator下加载vs封装的.lib库
    • 1、CMakeLists.txt文件
    • 2、添加头文件
    • 3、编辑mainwindow.cpp代码
    • 4、运行项目


前言:

使用qt做界面,并调用opencv、libtorch等库,有多种方式。
我尝试了以下三种方式,并成功运行:

(1) 另一篇讲的QT Creator +qmake+MSVC2017_64bit + Libtorch1.8.1+opencv+realsense sdk配置+调用vs封装的lib库的方式
(配置opencv、libtorch和realsense sdk头文件和库,是在.pro文件,用MSVC2017 64bit编译)

(2)另一篇讲的vs2017-QT VS Tools搭建opencv+libtorch+realsense sdk+调用vs封装的lib库和安装配置方法
(配置opencv、libtorch和realsense sdk头文件和库,是在项目->属性,配置包含目录、库目录、链接器等等)

(3) 下面要讲的QT Creator+CMake+opencv+libtorch+realsense sdk+加载用vs封装的lib库的方式
(配置opencv、libtorch和realsense sdk头文件和库,是在CMakeList.txt文件,用MSVC2017 64bit编译)

一、QT、CMake、libtorch安装配置

1、QT安装

(已经在我前面的文章中有介绍过)
安装链接:QT的直接下载地址:
也可以直接从官网下载。
安装时勾选根据需要勾选MSVC选项:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第1张图片
安装QT完成后,添加系统环境变量,在Path变量一栏添加下面的路径:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第2张图片

2、安装CMake

下载地址
根据自己的系统,选择合适的版本。
安装CMake完成后,添加系统环境变量,在Path变量一栏添加下面的路径:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第3张图片

3、libtorch安装配置

一. 下载LibTorch
从官网下载编译好的文件-最新编译版本:
以前编译的版本:
我现在用的是libtorch1.8.1,有两种版本可以选择分别是:“release和“debug”,我选择是:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第4张图片

现在后,解压到自己的目录下。
添加系统环境变量,在Path变量一栏添加下面的路径:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第5张图片

4、CDB调试工具下载

参考我的文章安装visual studio 时或安装后找到安装目录找到点击vs_installer.exe文件进行修改
安装windows SDK,则安装了cdb调试工具
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第6张图片
在windows kits文件夹下查找cdb.exe,我的安装路径在:
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe
也可以参考其他方式安装,如下参考:
参考链接:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/
如下:
Windows 调试工具(WinDbg、KD、CDB、NTSD)
解 Windows 调试工具。 此工具集包括 WinDbg 和其他调试程序。
安装 Windows 调试工具
可以将 Windows 调试工具作为开发工具包的一部分或作为独立的工具集进行获取:
(1) 作为 WDK 的一部分
Windows 调试工具包含在 Windows 驱动程序工具包 (WDK) 中。 若要获取 WDK,请参阅下载 Windows 驱动程序工具包 (WDK)。

(2) 作为 Windows SDK 的一部分
Windows 调试工具包含在 Windows 软件开发工具包 (SDK) 中。 若要下载安装程序或 ISO 映像,请参阅 Windows 开发人员中心上的 Windows 10 SDK。

(3) 作为独立工具集
可以单独安装 Windows 调试工具而不安装 Windows SDK 或 WDK,方法是启动 Windows SDK 的安装,然后在要安装的功能列表中仅选择“Windows 调试工具”(并清除所有其他功能的选择)。 若要下载安装程序或 ISO 映像,请参阅 Windows 开发人员中心上的 Windows 10 SDK。

5、opencv安装和realsense sdk安装

opencv安装,直接从官网下载安装即可。在官网最上面一栏有“Library”,点击,选择“Releases”,会看到各种版本,根据自己的需要,选择下载。windows则选择windows版本下载安装即可。
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第7张图片
Release各版本链接
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第8张图片

realsense sdk安装:下载链接,根据需要选择不同的版本,如下载Intel® RealSense™ SDK 2.0 (v2.49.0),我选择的是Intel.RealSense.SDK-WIN10-2.49.0.3474.exe:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第9张图片

二、新建QT工程

打开Qt Creator,文件->新建文件或项目
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第10张图片
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第11张图片
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第12张图片
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第13张图片
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第14张图片
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第15张图片
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第16张图片
注:此处的Compiler的C: 和C++处都选择“Microsoft Visual C++ Compiler 15.0 (amd64)”

Debugger选择cdb.exe,这个需要下载,前面工具下载已经讲解过。
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第17张图片

运行工程:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第18张图片
出现问题:“qt creator 无法找到执行档 请指定一个”:

QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第19张图片
参考:https://blog.csdn.net/weixin_47320074/article/details/119008180

分别运行release和debug,编译后在工程test同目录下有两个文件夹如:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第20张图片
在上图弹出的对话框“浏览”按键处,如果是执行debug,则选择:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第21张图片
如果是执行release,则选择:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第22张图片
设置完成后,再次执行debug或release,运行结果正确:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第23张图片

三、qt creator下配置libtorch

1、CMakeLists.txt文件

cmake_minimum_required(VERSION 3.5)

project(test LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.

#if(ANDROID)
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#    if (ANDROID_ABI STREQUAL "armeabi-v7a")
#        set(ANDROID_EXTRA_LIBS
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#    endif()
#endif()

find_package(Qt5 COMPONENTS Widgets REQUIRED)

set(Torch_DIR "D:/libtorch-win-shared-with-deps-1.8.1+cpu/libtorch/share/cmake/Torch")
find_package(Torch REQUIRED)
include_directories(${TORCH_INCLUDE_DIRS})

if(ANDROID)
  add_library(test SHARED
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
else()
  add_executable(test
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
endif()

#target_link_libraries(test PRIVATE Qt5::Widgets)
target_link_libraries(test Qt5::Widgets ${TORCH_LIBRARIES})

在原来的CMakeLists.txt文件中做了两处修改:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第24张图片
修改CMakeLists.txt文件后,保存,项目会自动Configuring和Generating。

2、在mainwindow.cpp中添加libtorch的头文件:

#undef slots
#include 
#include 
#define slots Q_SLOTS

添加位置在文件的最前面:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第25张图片

3、运行项目,成功:

QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第26张图片

四、qt creator下配置opencv

1、CMakeLists.txt文件

cmake_minimum_required(VERSION 3.5)

project(test LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.

#if(ANDROID)
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#    if (ANDROID_ABI STREQUAL "armeabi-v7a")
#        set(ANDROID_EXTRA_LIBS
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#    endif()
#endif()

find_package(Qt5 COMPONENTS Widgets REQUIRED)

set(Torch_DIR "D:/libtorch-win-shared-with-deps-1.8.1+cpu/libtorch/share/cmake/Torch")
find_package(Torch REQUIRED)
include_directories(${TORCH_INCLUDE_DIRS})

set(OpenCV_DIR "D:/OpenCV/opencv-3.4.1-vc14_vc15/opencv/build/x64/vc14/lib")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

if(ANDROID)
  add_library(test SHARED
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
else()
  add_executable(test
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
endif()

#target_link_libraries(test PRIVATE Qt5::Widgets)
target_link_libraries(test Qt5::Widgets ${TORCH_LIBRARIES} ${OpenCV_LIBS})

在原来的CMakeLists.txt文件中做了两处修改:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第27张图片

修改CMakeLists.txt文件后,保存,项目会自动Configuring和Generating。

2、在mainwindow.cpp中添加opencv的头文件:

#include 

添加位置:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第28张图片

3、运行项目,成功:

QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第29张图片
以上完成了使用qt_creatot和CMake,加载opencv、libtorch库,下面加载realsense SDK,读取视频。

五、qt creator下配置realsense SDK

1、CMakeLists.txt文件

cmake_minimum_required(VERSION 3.5)

project(test LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

#set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.

#if(ANDROID)
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#    if (ANDROID_ABI STREQUAL "armeabi-v7a")
#        set(ANDROID_EXTRA_LIBS
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#    endif()
#endif()

find_package(Qt5 COMPONENTS Widgets REQUIRED)

set(Torch_DIR "D:/libtorch-win-shared-with-deps-1.8.1+cpu/libtorch/share/cmake/Torch")
find_package(Torch REQUIRED)
include_directories(${TORCH_INCLUDE_DIRS})

set(OpenCV_DIR "D:/OpenCV/opencv-3.4.1-vc14_vc15/opencv/build/x64/vc14/lib")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

#-------------------------------------- 包含头文件 --------------------------------
include_directories("C:/Program Files (x86)/Intel RealSense SDK 2.0/include")
#-------------------------------------- 引入库文件 --------------------------------
link_directories("C:/Program Files (x86)/Intel RealSense SDK 2.0/lib/x64")

if(ANDROID)
  add_library(test SHARED
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
else()
  add_executable(test
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
endif()

#target_link_libraries(test PRIVATE Qt5::Widgets)
target_link_libraries(test Qt5::Widgets ${TORCH_LIBRARIES} ${OpenCV_LIBS} ${realsense2_LIBRARY} realsense2.lib)

在原来的CMakeLists.txt文件中做了两处修改:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第30张图片
修改CMakeLists.txt文件后,保存,项目会自动Configuring和Generating。

2、添加头文件

在mainwindow.cpp中添加realsense的头文件和opencv的头文件:

#include
#include
#include

#include
#include

using namespace std;
using namespace cv;

添加位置:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第31张图片

3、编辑控件

打开mainwindow.ui文件,也许你的文件命名不同,是项目里的.ui文件就可以。
将拖动Push Button和Label控件到需要编辑的窗口上。
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第32张图片
在控件PushButton按钮上,右击,选择“转到槽”,选择clicked()函数:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第33张图片
在mainwindow.h文件,出现on_pushButton_clicked()函数的声明:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第34张图片
在mainwindow.cpp文件,出现on_pushButton_clicked()函数的定义:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第35张图片

4、编辑mainwindow.cpp代码

编辑mainwindow.cpp代码,读取realsense相机获取的图像:

在on_pushButton_clicked()函数中编辑代码,mainwindow.cpp的代码如下:

#undef slots
#include 
#include 
#define slots Q_SLOTS

#include
#include
#include

#include
#include

#include "mainwindow.h"
#include "./ui_mainwindow.h"

using namespace std;
using namespace cv;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{        
    //创建数据管道
    rs2::pipeline pipe;
    rs2::config pipe_config;
    pipe_config.enable_stream(RS2_STREAM_DEPTH,640,480,RS2_FORMAT_Z16,30);
    pipe_config.enable_stream(RS2_STREAM_COLOR,640,480,RS2_FORMAT_BGR8,30);

    //start()函数返回数据管道的profile
    rs2::pipeline_profile profile = pipe.start(pipe_config);

    //声明数据流
    auto depth_stream=profile.get_stream(RS2_STREAM_DEPTH).as<rs2::video_stream_profile>();
    auto color_stream=profile.get_stream(RS2_STREAM_COLOR).as<rs2::video_stream_profile>();

    while(true)
    {
        //堵塞程序直到新的一帧捕获
        rs2::frameset frameset = pipe.wait_for_frames();
        //取深度图和彩色图
        rs2::frame color_frame = frameset.get_color_frame();//processed.first(align_to);

        //获取宽高
        const int color_w=color_frame.as<rs2::video_frame>().get_width();
        const int color_h=color_frame.as<rs2::video_frame>().get_height();

        //创建OPENCV类型 并传入数据
        Mat color_image(Size(color_w,color_h),
                               CV_8UC3,(void*)color_frame.get_data(),Mat::AUTO_STEP);

        Mat temp;
        QImage Qtemp;
        cvtColor(color_image, temp, CV_BGR2RGB);//BGR convert to RGB
        Qtemp = QImage((const unsigned char*)(temp.data), temp.cols, temp.rows, temp.step, QImage::Format_RGB888);

        ui->label->setPixmap(QPixmap::fromImage(Qtemp));
        ui->label->resize(Qtemp.size());
        ui->label->show();

        imshow("color_image",color_image);
        waitKey(10);
    }
}

注:用控件显示图像有三种方法,我用的是Pixmap的方法,使用比较简单,但不够实时,通过和imshow()对比就可以看出来,这里只是演示,如果想实时显示读取的图像,自己再尝试其他显示方法。

5、运行项目

运行项目,出现问题,在QT creator窗口最下面菜单栏处“应用程序输出”出现,“程序结束”或.exe crash的提示。
在这里插入图片描述
最后,我想到可能是有realsense2.lib,但没有找到realsense2.dll。
打开我的realsense sdk的安装文件夹:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第36张图片
在CMakeList.txt文件中,有link_directories(“C:/Program Files (x86)/Intel RealSense SDK 2.0/lib/x64”),我做了两步操作:
(1) 将Intel RealSense SDK 2.0目录下,bin文件夹里面的realsense2.dll文件复制到lib文件夹下。(我用的是x64里面的,两个文件夹要对应)
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第37张图片

(2) “C:\Program Files (x86)\Intel RealSense SDK 2.0\bin\x64”添加到系统环境变量中
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第38张图片
完成该设置以后,在执行项目,成功:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第39张图片

六、qt creator下加载vs封装的.lib库

vs封装.lib的方法,在我前面的文章中有讲解,链接地址

1、CMakeLists.txt文件

cmake_minimum_required(VERSION 3.5)

project(test LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

#set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.

#if(ANDROID)
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#    if (ANDROID_ABI STREQUAL "armeabi-v7a")
#        set(ANDROID_EXTRA_LIBS
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#    endif()
#endif()

find_package(Qt5 COMPONENTS Widgets REQUIRED)

set(Torch_DIR "D:/libtorch-win-shared-with-deps-1.8.1+cpu/libtorch/share/cmake/Torch")
find_package(Torch REQUIRED)
include_directories(${TORCH_INCLUDE_DIRS})

set(OpenCV_DIR "D:/OpenCV/opencv-3.4.1-vc14_vc15/opencv/build/x64/vc14/lib")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

include_directories("C:/Program Files (x86)/Intel RealSense SDK 2.0/include")
link_directories("C:/Program Files (x86)/Intel RealSense SDK 2.0/lib/x64")

include_directories("D:/software/test/include")
link_directories("D:/software/test/lib")

if(ANDROID)
  add_library(test SHARED
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
else()
  add_executable(test
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
endif()

#target_link_libraries(test PRIVATE Qt5::Widgets)
target_link_libraries(test Qt5::Widgets ${TORCH_LIBRARIES} ${OpenCV_LIBS} ${realsense2_LIBRARY} realsense2.lib DetectRs.lib)

在原来的CMakeLists.txt文件中做了两处修改:
分别添加的是:封装库的头文件的路径和封装库的.lib和.dll的路径;修改的是最后一行链接库中加入封装的.lib的名称DetectRs.lib。
在这里插入图片描述

修改CMakeLists.txt文件后,保存,项目会自动Configuring和Generating。

2、添加头文件

在mainwindow.cpp中添加封装库的头文件:

#include "detector.h"
#include "rs.h"

3、编辑mainwindow.cpp代码

编辑mainwindow.cpp代码,调用封装的.lib库中的函数,此处根据自己的函数定义进行调用。

//#undef slots
//#include 
//#include 
//#define slots Q_SLOTS

//#include
//#include
//#include

//#include
//#include

//using namespace std;
//using namespace cv;
//因为封装库里的头文件已经包含了libtorch和opencv的相关头文件,所以这里就可以注释掉,只包含封装库的头文件即可

#include "detector.h"
#include "rs.h"

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
       // 加载数据分类的名称
       std::vector<std::string> class_names = LoadNames("D:\\software\\test\\weights\\class.names");
       if (class_names.empty()) {
           return;
       }

       // 加载模型
       std::string weights = "D:\\software\\test\\weights\\model.torchscript.pt";

       // set device type - CPU/GPU
       torch::DeviceType device_type;
       device_type = torch::kCPU;
       
       //封装库的类的初始化函数
       auto detector = Detector(weights, device_type);
       
       //定义结构体
       realsenseData rsData;
       realsenseInit(rsData);//调用封装库里的函数。
}

4、运行项目

当我执行项目时,会提示程序异常结束。如下:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第40张图片
后来我发现,在用vs生成.lib库时,建立具有导出项的(DLL)动态链接库的项目时,自动生成了"pch.h"和“framework.h”这两个头文件,我并且include到了我的.cpp文件里,因此如果在QT项目工程目录封装库的include文件夹下没有这两个文件,就会提示上面的错误。因此将"pch.h"和“framework.h”这两个头文件复制到QT项目工程目录封装库的include文件夹下,在需要调用库函数的mainwindow.cpp的开头包含这两个头文件,不需要包含"pch.h"和“framework.h”。
即只在mainwindow.cpp加如下头文件即可:

#include "detector.h"
#include "rs.h"

(如果你用vs工程封装.lib库时,在定义函数的.cpp文件里面,包含了"pch.h"和“framework.h”这两个头文件。
(1) 在QT工程下,调用库的函数时,工程目录的包含路径下必须有这两个头文件,实际编写代码是不用include这两个文件;
(2) 在VS工程下,调用库的函数时,工程目录的包含路径下不需要有这两个头文件,实际编写代码时也不用include这两个文件;)
因此将"pch.h"和“framework.h”这两个头文件复制到QT项目工程目录封装库的include文件夹下后,再次运行项目,成功:
QT Creator+cmake + MSVC2017 64bit+Libtorch1.8.1+opencv+realsense sdk+加载用vs封装的lib库_配置_第41张图片
打印出输出结果。

你可能感兴趣的:(qt,visual,studio,开发语言)