首页 > 解决方案 > 如何将 RealSense2/OpenCV 源代码包含到 CMake 编译中?

问题描述

精简版

我想将 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,我仍然遇到新错误的问题。

据我所知,错误状态是它在文件夹中找不到opengl_config.cmake文件夹toolssrc并且examplesexamples将被删除,所以问题不大)。最后一个错误是

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 文件夹,它的工作原理如何,第二个错误似乎是两者在卸载配置中具有相同的名称librealsenseopencv可以add_custom_target安全地更改 for 卸载而不影响其余的 cmake 构建过程吗?

编辑 5

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

编辑 6

所以我做了更多的挖掘,并且opencv使用头文件来检查你使用的模块,问题是它没有正确生成一个。我不知道该怎么做,但我会做更多的挖掘来找出答案

标签: opencvvisual-c++cmakerealsense

解决方案


如果你想在你的 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_imgprocopencv_dnnopencv_imgcodecsopencv_videoioopencv_highgui等,具体取决于您使用的 OpenCV 功能。


推荐阅读