当前位置: 首页 > news >正文

Windows下 CLion中,配置 OpenCV、LibTorch

首先按照win下C++部署深度学习模型之clion配置pytorch+opencv教程记录 步骤配置。

LibTorch 部分

在测试LibTorch时会出现类似 c10.dll not found 的问题(Debug才有):

在这里插入图片描述

参考C++部署Pytorch(Libtorch)出现问题、错误汇总和
如何在windows10上使用cmake配置libtorch(vs2022版)

主要是MSVC需要这些 dll文件 。 可以如下修改CmakeList.txt让它找到:

cmake_minimum_required(VERSION 3.12)
project(opencv_test)set(CMAKE_CXX_STANDARD 17)set(CMAKE_PREFIX_PATH C:/Libraries/libtorch-win-shared-with-deps-2.3.0+cu118/libtorch)
#set(Torch_DIR "E:/libtorch/share/cmake/Torch")
#include_directories("E:/libtorch/include")
#include_directories("E:/libtorch/include/torch/csrc/api/include")
find_package(Torch REQUIRED)
message(STATUS "torch status: ${TORCH_FOUND}")
message(STATUS "torch library: ${TORCH_LIBRARIES}")
message(STATUS "TORCH_INSTALL_PREFIX: ${TORCH_INSTALL_PREFIX}")add_executable(opencv_test main.cpp)
target_link_libraries(opencv_test ${TORCH_LIBRARIES})if (MSVC)file(GLOB TORCH_DLLS "${TORCH_INSTALL_PREFIX}/lib/*.dll")add_custom_command(TARGET opencv_testPOST_BUILDCOMMAND ${CMAKE_COMMAND} -E copy_if_different${TORCH_DLLS}$<TARGET_FILE_DIR:opencv_test>)
endif (MSVC)if (CMAKE_VERSION VERSION_GREATER 3.12)set_property(TARGET opencv_test PROPERTY CXX_STANDARD 17)
endif()

OpenCV 部分

clion编译OpenCV时,install的位置在这(更多参考):
在这里插入图片描述

不能用clion编译,还是会出现找不到 dll文件的问题!!!

参考如下链接用VS编译:

Windows 下使用 CMake + Visual Studio 2022 编译 OpenCV 4.8.1 及其扩展模块 (主要参考)

vs2019编译opencv

注: Opencv_world勾选后后面build可能会出问题,不知道怎么解决建议别勾。

之后记得把 D:\prj\opencv\opencv4\out\install\x64-Debug\x64\vc17\bin添加到环境变量。

之后在camke时你可能又出现了问题:

CMake Warning at C:/Libraries/opencv-4.8.1/cmake-build-release/install/OpenCVConfig.cmake:190 (message):Found OpenCV Windows Pack but it has no binaries compatible with yourconfiguration.You should manually point CMake variable OpenCV_DIR to your build of OpenCVlibrary.
Call Stack (most recent call first):CMakeLists.txt:8 (find_package)CMake Error at CMakeLists.txt:8 (find_package):Found package configuration file:C:/Libraries/opencv-4.8.1/cmake-build-release/install/OpenCVConfig.cmakebut it set OpenCV_FOUND to FALSE so package "OpenCV" is considered to beNOT FOUND.

这是因为OpenCV_DIR 应当精确到lib!!! 故意的还是不小心的???

set(OpenCV_DIR C:/Libraries/opencv-4.8.1/cmake-build-release/install/lib)

完整工程文件

CmakeList.txt

cmake_minimum_required(VERSION 3.12)
project(opencv_test)
set(CMAKE_CXX_STANDARD 17)set(CMAKE_BUILD_TYPE "Release")set(OpenCV_DIR C:/Libraries/opencv-4.8.1/build/install/lib)  # 这里要精确到lib!
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
message(STATUS "OpenCV status:" ${OpenCV_FOUND})
message(STATUS "OpenCV Libs:" ${OpenCV_LIBS})set(CMAKE_PREFIX_PATH C:/Libraries/libtorch-win-shared-with-deps-2.3.0+cu118/libtorch)
#set(Torch_DIR "E:/libtorch/share/cmake/Torch")
#include_directories("E:/libtorch/include")
#include_directories("E:/libtorch/include/torch/csrc/api/include")
find_package(Torch REQUIRED)
message(STATUS "torch status: ${TORCH_FOUND}")
message(STATUS "torch library: ${TORCH_LIBRARIES}")
message(STATUS "TORCH_INSTALL_PREFIX: ${TORCH_INSTALL_PREFIX}")add_executable(opencv_test main.cpp)
target_link_libraries(opencv_test${TORCH_LIBRARIES}${OpenCV_LIBS}
)if (MSVC)file(GLOB TORCH_DLLS "${TORCH_INSTALL_PREFIX}/lib/*.dll")file(GLOB OpenCV_DLLS "${OpenCV_DIR}/../bin/*.dll")add_custom_command(TARGET opencv_testPOST_BUILDCOMMAND ${CMAKE_COMMAND} -E copy_if_different${TORCH_DLLS} ${OpenCV_DLLS}$<TARGET_FILE_DIR:opencv_test>)
endif (MSVC)

main.cpp

#include <iostream>
#include <torch/script.h>
#include <torch/torch.h>#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>void test_libtorch_version() {if (torch::cuda::cudnn_is_available()){std::cout << "cuDNN is available." << std::endl;}else{std::cout << "cuDNN is not available." << std::endl;}if (torch::cuda::is_available()){std::cout << "CUDA is available." << std::endl;}else{std::cout << "CUDA is not available." << std::endl;}std::cout << "Device count : " << torch::cuda::device_count() << std::endl;}int main(int, char**)  {torch::Tensor a = torch::rand({2, 3});std::cout << a << std::endl;test_libtorch_version();torch::Tensor b = torch::randint(10, 20, { 3, 2 });std::cout << b << std::endl;std::string path = "C:\\Users\\THM\\Documents\\Projects\\test_openvins_py\\data\\coco_bike.jpg";cv::Mat im = cv::imread(path);cv::imshow("image", im);cv::waitKey(0);return 0;
}
http://www.lryc.cn/news/362756.html

相关文章:

  • 机器学习知识点总结
  • OBproxy基础运维
  • 【Python】 探索Pytz库中的时区列表
  • C#操作MySQL从入门到精通(9)——Mysql中的数据类型以及对应的C#中的数据类型
  • 第六讲:AD、DA的工作原理及实现、运放电路
  • 计网ppt标黄知识点整理第(4)章节——谢希仁版本、期末复习自用
  • [数据集][目标检测]RSNA肺炎检测数据集VOC+YOLO格式6012张1类别
  • AndroidStudio中debug.keystore的创建和配置使用
  • 什么是最好的手机数据恢复软件?6 款手机数据恢复软件 [2024 年更新]
  • 力扣2653.滑动子数组的美丽值
  • 2024-06-04 架构-不同层次的抽象的处理-分析
  • MySQL——C语言连接数据库
  • 新能源汽车推行精益生产:绿色动力下的效率革命
  • FCA-九数云 试题及答案
  • qt dragEnterEvent dragLeaveEvent dragMoveEvent dropEvent都不响应的问题解决方案。
  • LVS精益价值管理系统 DownLoad.aspx 任意文件读取漏洞复现
  • 【GIC400】——中断使能
  • 容器项目之前后端分离
  • 游戏心理学Day04
  • 文件上传漏洞之upload-labs
  • 解决使用gets(getchar)函数无法输入字符(字符串)和scanf_s函数显示缺少“scanf_s”整型参数的问题
  • Excel的VLOOKUP函数的用法
  • 【Java面试】十三、ArrayList相关
  • 网络简史-基于图论的网络
  • Git工作机制,暂存区,本地库,远程库管理,常用命令
  • 找不到steam_api64.dll,无法继续执行的原因及解决方法
  • 鸿蒙开发接口定制管理:【@ohos.enterpriseDeviceManager (企业设备管理)】
  • Pytorch实用教程:多分类任务中使用的交叉熵损失函数nn.CrossEntropyLoss
  • 智慧冶金:TSINGSEE青犀AI+视频技术助力打造高效、安全的生产环境
  • 【ARM+Codesys案例】基于全志T3+Codesys软PLC的3C点胶边缘控制解决方案:整合了运动控制、视觉、激光测高等技术