Ubuntu 18.04下Cmake指定OpenCV版本编译(针对问题:fatal error: opencv2/xfeatures2d.hpp: No such file or directory)

在Ubuntu 18.04上,由于ROS-melodic自带的OpenCV 3.2.0不支持SIFT算法,因此需要安装OpenCV 4.1.0及OpenCV_contrib 4.1.0。安装后仍报错找不到xfeatures2d.hpp,原因是系统默认使用ROS的OpenCV版本。解决方案是在CmakeList.txt中指定OpenCV 4.1的完整路径,包括build、include和lib目录,确保编译时使用正确版本的OpenCV。

已经安装有Ros-melodic,自带有OpenCV 3.2.0。

编译一个项目时需要调用SIFT算法,这个算法需要include xfeatures2d.hpp头文件。

自带的OpenCV 3.2.0不包含这个部分,且项目需要OpenCV 4.1以上版本,于是下载安装4.1,仍然无法编译。查询后得知SIFT需要安装对应版本的contrib,遂重新下载OpenCV 4.1 + OpenCV_contrib 4.1.0,教程如下:

【Ubuntu 环境配置】(1)Ubuntu安装opencv-4.1.0+opencv_contrib-4.1.0(c++,py2,py3 皆可运行)_咿呀的博客-CSDN博客

但是吊诡的是安装之后仍然提示缺失xfeatures2d.hpp文件,但是查看OpenCV的安装目录可以看到是有这个文件的。

 查询默认OpenCV版本可知,系统会自动调用ROS-melodic自带的OpenCV 3.2.0。但是查询opencv4可以看出我们的4.1.0是正确安装了的,也就是说系统编译的时候没有使用4.1.0版本,需要我们手动指定Cmake编译的OpenCV版本。

<think>我们正在解决C++编译时出现的错误:'opencv2/opencv.hpp:没有那个文件或目录'。根据引用内容,我们得知用户可能是在Ubuntu18.04上使用OpenCV,并且之前遇到了类似的问题(如引用[1]、[2]、[3]、[4]所示)。主要原因是OpenCV的头文件路径没有被编译器正确找到。常见的解决方法包括:1.确保已正确安装OpenCV(包括开发文件)。2.编译指定OpenCV头文件的路径(通过编译器的-I选项)。3.CMake项目中,正确配置CMakeLists.txt文件以找到OpenCV。根据引用[4],我们可以通过修改CMakeLists.txt文件来指定OpenCV的路径。但是,用户当前的问题是关于`opencv2/opencv.hpp`文件找不到,这通常是因为OpenCV没有正确安装或配置。步骤:1.首先,确认系统中安装了OpenCV。用户提到他们可能已经安装了OpenCV3.4.1,但可能没有安装完整,或者安装路径未被编译器识别。2.如果未安装,建议安装OpenCV。可以使用apt安装预编译版本,或者从源码编译安装(如引用[3]所示,但注意引用[3]是针对OpenCV2的,而用户需要的是OpenCV3.4.1)。建议的解决方案:方案一:使用apt安装OpenCV(简单快捷)在Ubuntu18.04上,可以安装OpenCV3.2(默认仓库中的版本):sudoaptinstalllibopencv-dev但是,用户需要3.4.1版本,所以可能需要从源码编译安装。方案二:从源码编译安装OpenCV3.4.1(如果已经安装但找不到,也可能是路径配置问题)步骤:1.下载OpenCV3.4.1源码:https://github.com/opencv/opencv/archive/3.4.1.zip2.解压,然后进入解压后的目录3.创建build目录,并进入mkdirbuildcdbuild4.运行cmake生成Makefilecmake-DCMAKE_BUILD_TYPE=RELEASE-DCMAKE_INSTALL_PREFIX=/usr/local..#注意:这里CMAKE_INSTALL_PREFIX指定安装路径,通常为/usr/local5.编译并安装make-j$(nproc)sudomakeinstall6.运行sudoldconfig更新共享库缓存方案三:在CMakeLists.txt中指定OpenCV的路径(适用于使用CMake构建的项目)参考引用[4],在CMakeLists.txt中添加:set(OpenCV_DIR"/path/to/opencv/build")#设置OpenCVConfig.cmake所在的目录find_package(OpenCVREQUIRED)include_directories(${OpenCV_INCLUDE_DIRS})如果不知道OpenCVConfig.cmake的路径,可以搜索:find/-nameOpenCVConfig.cmake2>/dev/null找到后,将其路径设置给OpenCV_DIR。方案四:如果已经安装但头文件仍然找不到,可能是因为头文件路径不在编译器的默认搜索路径中。在编译命令中加入包含路径:g++-I/usr/local/include/opencv4...注意:OpenCV3和4的默认头文件路径可能不同。OpenCV3通常在/usr/local/include/opencv和/usr/local/include/opencv2,而OpenCV4可能在/usr/local/include/opencv4。请根据实际安装路径调整。根据用户提供的引用[1]和[4],他们之前尝试了从源码编译安装,并且需要用到nonfree模块(SIFT和SURF),而这些模块在OpenCV3中被放到了opencv_contrib中。因此,在编译OpenCV时需要加上opencv_contrib模块。如果用户要安装带contrib的OpenCV3.4.1,步骤如下:1.下载opencvopencv_contrib源码(注意版本要对应,都是3.4.1):wgethttps://github.com/opencv/opencv/archive/3.4.1.zipwgethttps://github.com/opencv/opencv_contrib/archive/3.4.1.zip2.解压3.opencv-3.4.1/build目录中执行:cmake-DCMAKE_BUILD_TYPE=RELEASE\-DCMAKE_INSTALL_PREFIX=/usr/local\-DOPENCV_EXTRA_MODULES_PATH=<path-to-opencv_contrib-3.4.1>/modules\..4.然后make和sudomakeinstall安装完成后,再按照方案三或四配置项目。总结解决步骤:1.检查OpenCV是否安装,并确定头文件位置(如/usr/local/include/opencv2/opencv.hpp)。2.如果没有安装,则安装。如果需要SIFT和SURF,则需要编译安装带contrib的版本。3.编译项目时,确保包含头文件的路径(通过-I或者CMakeLists.txt配置)。4.如果使用CMake,在CMakeLists.txt中正确设置OpenCV_DIR(如果需要)并使用find_package。最后,用户当前报错是找不到opencv2/opencv.hpp,这个头文件在OpenCV3中通常位于:/usr/local/include/opencv2/opencv.hpp如果确实有这个文件,那么编译命令中加上-I/usr/local/include即可(因为opencv2目录在/usr/local/include下面)。如果安装后仍然找不到,可能是由于多版本OpenCV共存导致路径冲突,请检查安装的版本和路径。</think> 针对编译错误 `opencv2/opencv.hpp: 没有那个文件或目录`,结合引用内容提供如下解决方案: ### 解决方法分步指南 #### 1. **检查OpenCV安装路径** 在终端执行: ```bash sudo find / -name "opencv.hpp" 2>/dev/null ``` 找到类似结果: ``` /usr/local/include/opencv2/opencv.hpp /home/user/opencv/build/include/opencv2/opencv.hpp ``` 记录头部文件的**完整路径**(如 `/usr/local/include` 或 `/home/user/opencv/build/include`)。 #### 2. **修改CMakeLists.txt(关键步骤)** 在项目的 `CMakeLists.txt` 中添加以下配置: ```cmake # 替换为你的实际路径 set(OpenCV_INCLUDE_DIRS "/usr/local/include") # Step1中的路径 set(OpenCV_LIB_DIR "/usr/local/lib") # OpenCV库路径(通常与include同级) include_directories(${OpenCV_INCLUDE_DIRS}) link_directories(${OpenCV_LIB_DIR}) target_link_libraries(你的可执行文件名 ${OpenCV_LIBS}) ``` *根据引用[4],路径需与安装目录一致[^4]。* #### 3. **验证OpenCV版本兼容性** - 检查代码使用的OpenCV版本是否一致(如 `#include <opencv2/opencv.hpp>` 对应OpenCV3+) - 安装缺失的依赖(Ubuntu示例): ```bash sudo apt install libopencv-dev python3-opencv ``` #### 4. **重新编译** ```bash mkdir build && cd build cmake .. make ``` ### 常见原因排查 | 问题类型 | 解决方案 | |------------------------|-----------------------------------| | 多版本OpenCV冲突 | 通过 `cmake-gui` 强制指定路径[^3] | | 未安装nonfree模块 | 编译时添加 `opencv_contrib`[^1] | | ROS环境变量干扰 | 在CMake中优先设置本地OpenCV路径[^2] | ### 安装建议 若未安装OpenCV,推荐源码编译(含SIFT/SURF支持): ```bash git clone --branch 3.4.1 https://github.com/opencv/opencv.git git clone --branch 3.4.1 https://github.com/opencv/opencv_contrib.git cd opencv/build cmake -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules .. make -j8 sudo make install ``` > ⚠️ **注意**:安装后需执行 `sudo ldconfig` 更新库链接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值