ROS动力学的opencv3连接

ROS动力学的opencv3连接,opencv,cmake,ros,clion,Opencv,Cmake,Ros,Clion,全部 我正在尝试在CLion项目中使用OpenCV库,但没有成功。我已经在opencv 3.2.0中立即安装了ROS动能(我可以在/opt/ROS/kinetic/include/opencv-3.2.0目录中看到它,我可以通过python导入cv2)。但是当我使用这样的CMakeLists.txt时: cmake_minimum_required(VERSION 3.6) project(visual_slam) set(CMAKE_CXX_STANDARD 11) set(SOURCE_F

全部

我正在尝试在CLion项目中使用OpenCV库,但没有成功。我已经在opencv 3.2.0中立即安装了ROS动能(我可以在/opt/ROS/kinetic/include/opencv-3.2.0目录中看到它,我可以通过python导入cv2)。但是当我使用这样的CMakeLists.txt时:

cmake_minimum_required(VERSION 3.6)
project(visual_slam)

set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
set(OpenCV_DIR /opt/ros/kinetic/include/opencv-3.2.0)
include_directories( ${OpenCV_DIR})
add_executable(visual_slam ${SOURCE_FILES})
使用下面的简单代码:

  #include <iostream>
  #include <opencv2/opencv.hpp>

  using namespace cv;

  int main()
  {
      return 0;
  }
但错误是当CMake构建时

 By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "OpenCV",      but
 CMake did not find one.
 Could not find a package configuration file provided 
 by "OpenCV" (requested version 3) with any of the following names:

 OpenCVConfig.cmake
 opencv-config.cmake

您得到的第二个错误(即缺少的
OpenCV.cmake
)实际上不仅与第一个错误(对
未定义引用)有关,而且是原因

如果
cmake
找不到OpenCV模块,
${OpenCV\u LIBS}
不会做任何事情,这意味着
目标链接库(visual\u slam${OpenCV\u libraries})
不会链接到代码所需的库。也就是说,我还相信它是
OpenCV\u LIBS
而不是
OpenCV\u库

当然,您可以指定
find_package(…)
命令查找
cmake
模块的路径(我认为这是变量),甚至可以手动指定OpenCV安装的根文件夹,手动处理
OpenCV.cmake
为您处理的所有事情

最后但并非最不重要的一点是,我不确定roskinetic是否使用了最新的OpenCV(您正在使用的就是v3.2)。你应该检查一下,如果使用了不同的版本(很可能),你必须从头开始构建所有与ROS-OpenCV相关的软件包。你可能会问“我为什么要这样做?”。好的,为了避免兼容性问题和各种奇怪的错误,这些错误可能会发生,也可能不会发生(取决于您使用的OpenCV功能),因为OpenCV的X版本用于ROS的二进制软件包,Y版本出现在您的系统上(X!=Y)。我曾经用PCL(点云库)做过一次,我花了好几天的时间才得出这个结论,因为我得到的错误(对于C++来说是典型的)非常神秘。为避免冲突,请确保您的系统上只存在一个希望与ROS安装一起使用的OpenCV版本(可通过
cmake
找到)。这也是为什么ROS二进制软件包通过ubunturepos使用软件包管理器(OpenCV、PCL等)解析的依赖项进行发布的原因


PS:由于我没有使用
Clion
,我还建议(在做我上面提到的任何事情之前)检查IDE中是否有隐藏的
cmake
相关设置导致了问题的出现。

第二个错误(即缺少的
OpenCV.cmake
)实际上不仅与第一个相关(未定义的对
的引用),而且是原因

如果
cmake
找不到OpenCV模块,
${OpenCV\u LIBS}
不会做任何事情,这意味着
目标链接库(visual\u slam${OpenCV\u libraries})
不会链接到代码所需的库。也就是说,我还相信它是
OpenCV\u LIBS
而不是
OpenCV\u库

当然,您可以指定
find_package(…)
命令查找
cmake
模块的路径(我认为这是变量),甚至可以手动指定OpenCV安装的根文件夹,手动处理
OpenCV.cmake
为您处理的所有事情

最后但并非最不重要的一点是,我不确定roskinetic是否使用了最新的OpenCV(您正在使用的就是v3.2)。你应该检查一下,如果使用了不同的版本(很可能),你必须从头开始构建所有与ROS-OpenCV相关的软件包。你可能会问“我为什么要这样做?”。好的,为了避免兼容性问题和各种奇怪的错误,这些错误可能会发生,也可能不会发生(取决于您使用的OpenCV功能),因为OpenCV的X版本用于ROS的二进制软件包,Y版本出现在您的系统上(X!=Y)。我曾经用PCL(点云库)做过一次,我花了好几天的时间才得出这个结论,因为我得到的错误(对于C++来说是典型的)非常神秘。为避免冲突,请确保您的系统上只存在一个希望与ROS安装一起使用的OpenCV版本(可通过
cmake
找到)。这也是为什么ROS二进制软件包通过ubunturepos使用软件包管理器(OpenCV、PCL等)解析的依赖项进行发布的原因


PS:由于我没有使用
Clion
,我还建议(在做我上面提到的任何事情之前)检查IDE中是否有一些隐藏的
cmake
相关设置会把事情搞砸。

感谢您的回复!如果我从终端启动Clion,问题就解决了。细节啊,所以这个问题跟IDE有关。同样的事情发生在Qt Creator(我使用)上。顺便说一句,谢谢你的回复!如果我从终端启动Clion,问题就解决了。细节啊,所以这个问题跟IDE有关。顺便说一句,Qt Creator(我使用的)也会发生同样的事情。
 By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "OpenCV",      but
 CMake did not find one.
 Could not find a package configuration file provided 
 by "OpenCV" (requested version 3) with any of the following names:

 OpenCVConfig.cmake
 opencv-config.cmake