关闭videoio编译opencv-python源码时出现文件未找到错误
问题:关闭OPENCV_VIDEOIO后编译报错找不到videoio.hpp
错误信息
/opencv-python/opencv/modules/gapi/include/opencv2/gapi/streaming/cap.hpp:26:10: fatal error: opencv2/videoio.hpp: No such file or directory #include <opencv2/videoio.hpp>
执行失败的Docker命令
RUN pip wheel . --verbose
当前CMake参数
ENV CMAKE_ARGS="\ -D BUILD_JAVA=OFF \ -D BUILD_PERF_TESTS=ON \ -D BUILD_TESTS=ON \ -D BUILD_opencv_apps=OFF \ -D BUILD_opencv_freetype=OFF \ -D BUILD_opencv_calib3d=OFF \ -D BUILD_opencv_videoio=OFF \ -D BUILD_opencv_python2=OFF \ -D BUILD_opencv_python3=ON \ -D WITH_GSTREAMER=OFF \ -D VIDEOIO_ENABLE_PLUGINS=OFF \ -D ENABLE_FAST_MATH=1 \ -D ENABLE_PRECOMPILED_HEADERS=OFF \ -D INSTALL_C_EXAMPLES=OFF \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D INSTALL_TESTS=OFF"
解决建议
- 关闭GAPI模块:GAPI的streaming组件硬依赖videoio,若你的项目不需要GAPI功能,直接在CMake参数中添加
-D BUILD_opencv_gapi=OFF,就能避免编译依赖videoio的GAPI代码。 - 禁用GAPI对videoio的依赖检测:如果需要保留GAPI但不需要streaming功能,尝试添加
-D HAVE_opencv_videoio=OFF,让CMake告知GAPI跳过videoio相关的代码编译。部分版本可能需要手动调整GAPI的CMake配置,屏蔽streaming模块的编译选项。 - 手动修改源码补丁:若必须同时保留GAPI和关闭videoio,需修改
cap.hpp文件,将头文件包含改为条件编译:
同时修改GAPI中使用videoio接口的源码部分,确保无videoio时不会触发相关调用。这种方式需要维护自定义补丁,仅适合特殊场景。#ifdef HAVE_opencv_videoio #include <opencv2/videoio.hpp> #endif
内容的提问来源于stack exchange,提问作者Joey Grisafe
相关产品推荐
相关产品推荐

