【问题标题】:How do I include RealSense2/OpenCV source into compilation with CMake?如何使用 CMake 将 RealSense2/OpenCV 源代码包含到编译中?
【发布时间】:2020-08-06 21:59:39
【问题描述】:

短版

我想将 OpenCV 和 librealsense2 的(未编译的)源文件与 CMake 捆绑在一起,这样我就可以在 RPi 上(或根本没有)交叉编译它,但我是 CMake 的新手,不知道怎么做。

add_executable (CMakeRealSense "CMakeRealSense.cpp" "CMakeRealSense.h")

include_directories(opencv libs/opencv-master/include)
include_directories(realsense2 libs/librealsense-master/include)

这给出了一堆与 RS 文件本身相关的错误(X 未在范围内声明)。

长版

我目前正在尝试为英特尔实感摄像头 d435 编写程序。我正在使用两个库。 OpenCV 和 librealsense2(相机的实际库)。我首先使用 VCPKG 加载包,这适用于我的本地计算机,但我无法在 RPi 3 上正确编译它。我认为将源文件与项目捆绑是个好主意,但我不能让它工作。我收到一个又一个错误。

编辑 1

当我在本地 Windows 机器上编译时,我收到错误 Cannot open include file: 'opencv2/opencv_modules.hpp': No such file or directory。而且,在我的 pi 上,它给出了一堆与 RealSense 文件本身相关的错误(没有全部检查,其中有 780 个)

编辑 3

正如@squareskittles 指出的那样。我修复了与本地 Windows 版本相关的问题,但对于 pi,我仍然遇到新错误的问题。

据我所知,错误状态表明它在文件夹 tools、src 和 examples 中找不到 opengl_config.cmake 文件夹(examples 将被删除,所以没有太多问题)。最后一个错误是

CMake Error at libs/librealsense-master/CMake/install_config.cmake:4 (add_custom_target):
  add_custom_target cannot create target "uninstall" because another target
  with the same name already exists.  The existing target is a custom target
  created in source directory
  "/home/pi/.vs/CMakeRealSense/d6128cea-ef93-4c7b-83bb-89ee6315963f/src/libs/opencv-master".
  See documentation for policy CMP0002 for more details.

编辑 4

所以我首先添加了包含安装配置的 cmake 文件夹,它是如何工作的,第二个错误似乎是 librealsense 和 opencv 在卸载配置中具有相同的名称。可以安全地更改用于卸载的add_custom_target 而不影响其余的 cmake 构建过程吗?

编辑 5

它成功编译了 realsense2 库(据我所知),但它无法打开 opencv2/core.hpp 源文件。不知道为什么找不到。

编辑 6

所以我做了更多的挖掘工作,并且很明显 opencv 使用头文件来检查您使用的模块,problem is it doesnt properly generate one。我不知道该怎么做,但我会做更多的挖掘来找出答案

【问题讨论】:

  • 欢迎来到 Stack Overflow!我认为您正在寻找的命令是 add_subdirectory() 告诉 CMake 进入每个 opencv 和 realsense2 目录,并配置它们。
  • @squareskittles 这为 Windows 编译修复了(非常感谢顺便说一句),但还没有修复 pi 版本,请编辑帖子以反映这一点
  • 讨论了与在项目中包含 OpenCV 源代码相关的一些问题(和修复)here。
  • 我以前看过那篇文章,但我读到它时感到很困惑。可能是我缺乏这方面的经验。我会试着再看一眼

标签: opencv visual-c++ cmake realsense


【解决方案1】:

如果您想在您的 CMake 项目中直接包含 OpenCV 和 RealSense2 源代码,您应该使用 add_subdirectory() 命令告诉 CMake 查找每个目录。请务必在每个其他源存储库中提供 顶级 CMakeLists.txt 文件的路径,否则将无法完全配置它们:

add_subdirectory(libs/opencv-master)
add_subdirectory(libs/librealsense-master)

稍后在您的 CMakeLists.txt 文件中,您需要使用在每个子存储库中定义的 CMake 变量和目标,以便将每个库包含在 您的 可执行文件中。例如:

# Define your CMake executable target.
add_executable(CMakeRealSense CMakeRealSense.cpp CMakeRealSense.h)

# Link the OpenCV components and RealSense targets to your executable target.
target_link_libraries(CMakeRealSense PRIVATE opencv_core realsense2)

您可能还需要链接其他 OpenCV 组件,例如 opencv_imgproc、opencv_dnn、opencv_imgcodecs、opencv_videoio、opencv_highgui 等,具体取决于您使用的 OpenCV 功能。

【讨论】:

  • 这可能是我需要的,但它还没有解决这个问题。我仍然遇到编辑 3 中描述的相同错误
  • @Autism 这是将这些外部库包含在您自己的源代码树中的缺点之一,您可能会遇到命名冲突。您必须重命名自定义目标之一(类似于opencv_uninstall)并重建。此外,如果您缺少头文件,您可能需要手动添加缺少的头文件的路径:target_include_directories(CMakeRealSense PRIVATE libs/opencv-master/modules/core/include)
  • 错误更改为不能在opencv.hpp 中包含opencv2/opencv_module.hpp。但是感谢您一路指导我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
相关资源
最近更新 更多