opencv - 如何将 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
文件夹tools
,src
并且examples
(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
安全地更改 for 卸载而不影响其余的 cmake 构建过程吗?
编辑 5
它成功编译了 realsense2 库(据我所知),但它无法打开opencv2/core.hpp
源文件。不知道为什么它找不到它。
编辑 6
所以我做了更多的挖掘,并且opencv使用头文件来检查你使用的模块,问题是它没有正确生成一个。我不知道该怎么做,但我会做更多的挖掘来找出答案
解决方案
如果你想在你的 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 功能。
推荐阅读
- mysql - Maria 数据库中的行锁定
- javascript - 根据所选选项更改字体大小
- typescript - 如何在 TypeScript 中覆盖量角器的 jasmine.Spec.prototype.addExpectationResult?
- java - Maven nested dependency is not accessible
- json - 在 JSON - REST API 上,如何对非关键错误或重新尝试执行警告
- opengl - 我使用的每个 glew 函数的未解析外部符号
- java - 使用 WebDriver 找不到带有 CSS 选择器的 WebElement
- azure-devops - Azure Devops 服务管道构建失败。通过 Visual Studio 和 msbuild 命令提示符成功构建
- amazon-web-services - AWS 中长期运行的订阅后台服务的最佳位置
- php - PhpStorm 不通过 xdebug.file_link_format 打开文件