fatal error: opencv2/highgui.hpp 和 fatal error: opencv2/calib3d.hpp 的错误

解决OpenCV4.0链接错误
本文介绍了一个关于源码编译的OpenCV4.0,在编译工程时遇到的链接错误问题及其解决办法。通过在子模块的CMakeList文件中正确地链接OpenCV库,可以解决此错误。

源码编译的opencv 4.0,编译工程时出现这个错误,工程中CMakeList也可以finding_package到正确的opencv库。
一开始以为是opencv版本太多链接出错,清空所有opencv版本仔细重编译了一遍opencv 4.0 但是错误依然存在,查看过/usr/local/lib/pkgconfig/opencv4.pc, 里面includedir也没有问题。

最终发现,是在工程中对应模块的CMakeList中需要链接opencv,解决方案:

在相应子模块的CMakeList中添加如下:

target_link_libraries(${PROJECT_NAME} PUBLIC ${OpenCV_LIBS})

<think>首先,用户的问题是关于解决编译错误:"fatalerror:opencv2/tracking.hpp:Nosuchfileordirectory"。他们参考了站内引用,这些引用讨论了类似问题,比如缺少其他OpenCV头文件如video/video.hpp、face.hppnonfree.hpp。这些引用的核心是处理OpenCV版本不匹配、模块位置变化或依赖问题。用户的具体需求是缺失tracking.hpp文件,这可能在OpenCV的contrib模块中,类似引用[3]提到的nonfree.hpp移到opencv_contrib的情况。从引用中:-[1]指出CMake能找到OpenCV4,但编译时报找不到头文件,暗示路径或配置问题。-[2]提到头文件缺失,可能与版本不兼容相关,用户换了版本后解决了。-[3]详细描述了opencv2/nonfree/nonfree.hppOpenCV3.x后被移到了opencv_contrib中,并通过改用绝对路径或安装contrib模块解决。对于opencv2/tracking.hpp:-在OpenCV中,tracking模块通常在opencv_contrib仓库中,不包含在主包中。OpenCV的主仓库包含核心模块,而扩展模块如tracking在contrib中。-用户可能在编译时未包含contrib模块或路径未设置正确。解决方案步骤:1.**检查OpenCV版本安装**:确保安装了包含tracking模块的版本。跟踪模块在OpenCV3.x及以后的contrib中可用。2.**安装opencv_contrib**:如果只安装了主OpenCV,需要安装贡献模块。类似于引用[3]中的方案。3.**CMake配置**:在使用CMake编译时,指定贡献模块的路径。4.**更新包含路径**:在代码中,如果必要,改为使用正确的头文件路径,如引用[3]中做的那样。结构我的回答:-**介绍问题**:解释为什么会出现这个错误。-**步骤解决**:-确认OpenCV安装:检查是否安装了贡献模块。-安装opencv_contrib如果未安装:提供命令或方法。-配置CMake:添加贡献模块的路径到CMakeLists.txt。-修改代码:如果模块结构变化,更新#include指令。-重新编译:测试。-**预防类似问题**:建议如何避免。-**生成相关问题**:如系统指令要求。系统指令要求:-使用中文回答。-结构化清晰。-生成相关问题。-LaTeX格式正确:但问题中没有数学,所以可能不需要,但如果有讨论变量或路径,用$...$。-添加引用标识:在末尾添加[^1],[^2]等,但引用是用户提供的,我在回答中引用这些参考,但系统指令说"引用的段落末尾自然地添加引用标识",所以如果我引用用户给的引用,需要标识。-用户引用[^1],[^2],[^3],所以我应基于这些构建回答。用户上一次问题:在历史中,用户提到缺失tracking.hpp,但这不是第一次提问;聊天开始是关于其他文件缺失,所以我需参考。生成相关问题:-如:1.如何安装OpenCVcontrib模块?2.CMake配置技巧?3.常见OpenCV编译错误?最终回答结构:1.引言:解释问题原因。2.详细解决步骤。3.总结。4.§§相关问题§§部分。</think> ### 解决"fatal error: opencv2/tracking.hpp: No such file or directory"问题 这个错误通常是由于OpenCV的`tracking.hpp`头文件缺失引起的,该文件属于OpenCV的扩展模块opencv_contrib。在OpenCV 3.x及更高版本中,一些高级模块(如tracking、face、nonfree等)被分离到了opencv_contrib仓库中,而非包含在主安装包中[^1]。以下是基于您的引用常见实践的解决步骤,我将一步步引导您完成。整个过程基于Linux或Windows系统,但核心逻辑类似。 #### 步骤1: 确认OpenCV安装版本 - **原因分析**:首先,检查您安装的OpenCV版本内容。`tracking.hpp`仅存在于opencv_contrib模块中,默认的OpenCV安装可能未包含它。如果您的CMake能找到OpenCV但编译时报错,很可能是contrib模块未正确集成[^1][^2]。 - **操作建议**: - 查看OpenCV版本:运行以下命令: ```bash pkg-config --modversion opencv # Linux 或 opencv_version # Windows/Linux通用 ``` 如果输出类似于`3.4.12`或`4.5.4`,记下版本号。 - 检查是否安装了contrib模块:在安装目录中查找`opencv_contrib`文件夹(如`/usr/local/include/opencv2/tracking`或`C:\opencv\build\include\opencv2\tracking`)。如果不存在,说明contrib缺失[^3]。 - 如果版本过低(如低于3.0)或contrib缺失,直接跳到步骤2安装。 #### 步骤2: 安装或添加opencv_contrib模块 - **原因分析**:类似引用[3]中的`nonfree.hpp`问题,`tracking.hpp`需要从opencv_contrib获取。OpenCV 3.x及以上版本中,contrib模块是独立的,需额外安装[^3]。 - **操作建议**: - **方法A:重新安装OpenCV并包含contrib(推荐)**: 1. 卸载旧版OpenCV(如有):如果之前通过包管理器安装,卸载它。 ```bash sudo apt remove libopencv-dev # Ubuntu示例 ``` 2. 下载源码:前往OpenCV官网下载主仓库contrib仓库源码(确保版本匹配): ```bash wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.4.zip # 示例版本 wget -O contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.4.zip unzip opencv.zip unzip contrib.zip ``` 3. 使用CMake构建并包含contrib: ```bash cd opencv-4.5.4 # 替换为您的版本 mkdir build cd build cmake -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.4/modules .. # 关键:设置contrib路径 make -j$(nproc) sudo make install ``` 4. 验证安装:检查`tracking.hpp`是否存在于安装目录(如`/usr/local/include/opencv2/tracking/tracking.hpp`)。 - **方法B:快速添加contrib模块到现有安装(如果不想重装)**: 1. 下载contrib源码(如上)。 2. 在CMakeLists.txt中添加contrib路径: ```cmake set(OpenCV_DIR "/path/to/opencv/build") # 指定OpenCV安装路径 find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS} "/path/to/opencv_contrib/modules") # 添加contrib头文件路径 ``` 3. 在代码中更新include路径:如果错误仍未解决,尝试使用绝对路径(类似引用[3]方案): 原代码:`#include <opencv2/tracking.hpp>` 改为:`#include "/path/to/opencv_contrib/modules/tracking/include/opencv2/tracking.hpp"` #### 步骤3: 配置重新编译 - **原因分析**:CMake配置不完整可能导致路径错误。确保CMake能正确找到contrib模块的头文件[^1]。 - **操作建议**: - 更新CMake缓存:在build目录运行`cmake ..`重新生成配置。 - 检查CMake输出:查找类似`tracking: YES`的行,确认模块已启用。 - 重新编译项目:运行`make clean && make`。 - 测试简单示例:创建一个test.cpp文件: ```cpp #include <opencv2/tracking.hpp> int main() { return 0; } ``` 编译:`g++ -o test test.cpp $(pkg-config --cflags --libs opencv)` #### 预防措施常见问题 - **版本匹配**:确保主OpenCVopencv_contrib版本一致(如都使用4.5.4),避免兼容性问题[^2]。 - **环境变量**:设置`PKG_CONFIG_PATH`(Linux)或系统PATH(Windows)指向新安装目录。 - **贡献模块安装失败处理**:如果CMake报错(如找不到文件),确保下载了完整的contrib仓库,并检查路径是否精确[^3]。 如果您按照以上步骤操作,错误通常能解决。编译完成后,重新运行项目测试。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值