OpenCV 4.1.1 编译错误解决方案(cudaoptflow.hpp not found)
📌 问题描述
在 Jetson 平台编译 OpenCV 4.1.1 + contrib 时出现如下错误:
bash
fatal error: opencv2/cudaoptflow.hpp: No such file or directory
#include "opencv2/cudaoptflow.hpp"
即使在 CMake 中添加了:
bash
-D BUILD_opencv_cudaoptflow=OFF
仍然会在 pyopencv_generated_include.h
中出现
#include "opencv2/cudaoptflow.hpp"
,导致 Python 绑定编译失败。
📌 产生原因
- OpenCV 4.1.1 的 Python 绑定生成器存在 bug ,会把已经关闭的
cudaoptflow
模块仍然写进绑定头文件。 - 因此,即使禁用了
cudaoptflow
,Python 绑定依然会尝试包含
opencv2/cudaoptflow.hpp
。
🔧 解决方法
方法 1:彻底清理缓存并重新 CMake
-
删除缓存和绑定生成目录:
bashcd ~/opencv/opencv410/opencv-4.1.1/release rm -rf CMakeCache.txt CMakeFiles/ modules/python_bindings_generator
-
重新运行 CMake(关闭
cudaoptflow
):bashcmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN=5.3 -D CUDA_ARCH_PTX="" -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.1/modules -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_opencv_cudaoptflow=OFF ..
-
编译:
bashmake -j$(nproc) sudo make install
方法 2:禁用所有 CUDA Python 模块(更保险)
如果仍然失败,可以彻底关闭所有 CUDA 相关模块:
bash
-D BUILD_opencv_cudalegacy=OFF -D BUILD_opencv_cudacodec=OFF -D BUILD_opencv_cudaarithm=OFF -D BUILD_opencv_cudawarping=OFF -D BUILD_opencv_cudaoptflow=OFF
这样可以避免 Python 绑定引用任何 CUDA 模块。
方法 3:手动修改绑定头文件
如果不想重新 CMake,也可以手动编辑:
bash
nano ~/opencv/opencv410/opencv-4.1.1/release/modules/python_bindings_generator/pyopencv_generated_include.h
删除或注释掉:
cpp
#include "opencv2/cudaoptflow.hpp"
然后继续编译:
bash
make -j$(nproc)
✅ 总结
- 如果不需要 NVIDIA Optical Flow,直接
-D BUILD_opencv_cudaoptflow=OFF
即可,但要清理缓存。\ - 如果还报错,可以关闭所有 CUDA 模块,或者手动删掉 Python 绑定里的
cudaoptflow.hpp
引用。\ - 如果确实需要 CUDA 光流功能,建议升级到 OpenCV ≥
4.5,该问题已修复。