Ubuntu18.04编译OpenCV3.4.6遇SolvePnPMethod未定义错误求助
解决方案
错误原因
编译错误源于opencv_contrib的3.4分支代码与OpenCV 3.4.6版本不兼容:SolvePnPMethod类型是OpenCV 4.x版本才引入的,但你使用的OpenCV 3.4.6中并无该类型,而当前checkout的opencv_contrib 3.4分支的aruco模块已引入该仅在4.x存在的类型,导致编译冲突。
解决步骤
- 切换opencv_contrib到与OpenCV 3.4.6完全匹配的标签版本
进入opencv_contrib目录,执行:git checkout 3.4.6 - 重新编译流程
- 清空旧build目录:
rm -rf build && mkdir build && cd build - 重新执行原cmake命令:
cmake -D CMAKE_INSTALL_PREFIX=/usr/local \ -D CMAKE_BUILD_TYPE=Release \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D ENABLE_CXX11=1 \ -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \ -D OPENCV_ENABLE_NONFREE=True \ -D INSTALL_C_EXAMPLES=ON \ -D WITH_CUDA=ON \ -D WITH_TBB=ON \ -D ENABLE_FAST_MATH=1 \ -D WITH_OPENMP=ON \ -D WITH_CUFFT=ON \ -D WITH_CUBLAS=ON \ -D BUILD_opencv_cudacodec=OFF \ -D CUDA_nppicom_LIBRARY=stdc++ \ -DCUDA_ARCH_NAME=Manual \ -DCUDA_ARCH_BIN="86" .. - 重新启动编译:
make -j8
- 清空旧build目录:
备选临时修复(不推荐)
若暂时无法切换标签,可手动修改aruco头文件适配:
打开/home/lightwish/Downloads/opencv-3.4.6/opencv_contrib/modules/aruco/include/opencv2/aruco.hpp:
- 第263行:将
SolvePnPMethod替换为int - 第266行:保留
SOLVEPNP_ITERATIVE(它在OpenCV 3.4中是int类型宏定义)
此方法可能引发其他潜在兼容问题,优先推荐版本匹配方案。
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

