记录ubuntu下编译openCV4 + cuda + python3 踩坑(C++11 python相关报错)


前言

ubuntu下编译 openCV4 遇到了几个问题,记录一下:
特别提示CMake 参数一定要带上

 -D OPENCV_ENABLE_NONFREE=ON 
配置完参数必须要检查一下输出的信息
确认  NON-free algorithms YES

此选项的作用是使用没有版权的算法。例如 SURF SIFT

编译openCV4 需要做的准备工作可以参考下面的链接:

Jetson Nano编译安装带cuda的opencv4.x 和opencv_contrib4.x


一、python include lib相关的设置报错

‘PyObject {aka struct _object}’ has no member named ‘v’

这个主要原因是cmake 参数需要设置 python3的include lib exec 路径(具体要按照实际安装的python版本去填写)

-D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3.8
-D OPENCV_PYTHON3_VERSION=3.8
-D PYTHON3_INCLUDE_PATH=/usr/include/python3.8
-D PYTHON3_LIBRARIES=/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so
-D PYTHON3_EXECUTABLE=/usr/bin/python3.8
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/

二、C++11 support报错

opencv4.x/modules/core/include/opencv2/core/cvdef.h:775:4: error: #error "OpenCV 4.x+ requires enabled C++11 support"

尝试方法一:这个网上大量的发帖说是要 添加 -std=c++11

我也反复试了添加

-D CMAKE_CXX_FLAGS="-std=c++11"

但是没有问题没有得到解决

尝试方法二:在 opencv-4.x/build/CMakeLists.txt 里面添加

# 设置指定的C++编译器版本是必须的,如果不设置,或者为OFF,则指定版本不可用时,会使用上一版本。
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 指定为C++11 版本
set(CMAKE_CXX_STANDARD 11)

依然相同的报错

尝试方法三:修改 makefile里面的g++ flags

文章链接 :添加c++11标准的支持
g++ fopenmp -o ${TARGET} &{OBJECTS} -I ${INCLUDE} ${LIBS} -std=c++11

我在我自己的 opencv-4.x/build/makefile 文件里面没有找到可以修改 g++的地方,放弃了

最后成功的方法

后来偶然在一篇文章中看到可以单独设置 CUDA_NVCC_FLAGS
-D CMAKE_CXX_FLAGS="-std=c++11" 基础上添加

-D CUDA_NVCC_FLAGS="--compiler-options "-std=c++11""

总算是编译通过了。

目录说明

在opencv-4.x 目录下 新建build目录,将解压出的 opencv_contrib-4.x 放在opencv-4.x 目录下,或者在编译设置里面 OPENCV_EXTRA_MODULES_PATH 值填绝对路径

总结

最后的编译参数是

cmake 
-D WITH_CUDA=ON 
-D CUDA_ARCH_BIN="5.3" 
-D CUDA_ARCH_PTX="" 
-D OPENCV_ENABLE_NONFREE=ON 
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.x/modules 
-D WITH_GSTREAMER=ON 
-D WITH_LIBV4L=ON 
-D WITH_QT=ON 
-D WITH_OPENGL=ON 
-D BUILD_TESTS=OFF 
-D BUILD_PERF_TESTS=OFF 
-D BUILD_EXAMPLES=ON 
-D CMAKE_BUILD_TYPE=RELEASE 
-D CMAKE_INSTALL_PREFIX=/usr/local 
-D OPENCV_GENERATE_PKGCONFIG=ON
==========================python相关的设置默认会自动查找路径,无需写===============
-D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3.8 
-D OPENCV_PYTHON3_VERSION=3.8 
-D PYTHON3_INCLUDE_PATH=/usr/include/python3.8 
-D PYTHON3_LIBRARIES=/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so 
-D PYTHON3_EXECUTABLE=/usr/bin/python3.8 
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/  
========================================================
-D CMAKE_CXX_FLAGS="-std=c++11" 
-D CUDA_NVCC_FLAGS="--compiler-options "-std=c++11"" 
..

make -j8 完成后

sudo make install 
-- Installing: /usr/local/bin/opencv_visualisation
-- Set runtime path of "/usr/local/bin/opencv_visualisation" to "/usr/local/lib:/usr/local/cuda-10.2/lib64"
-- Installing: /usr/local/bin/opencv_interactive-calibration
-- Set runtime path of "/usr/local/bin/opencv_interactive-calibration" to "/usr/local/lib:/usr/local/cuda-10.2/lib64"
-- Installing: /usr/local/bin/opencv_version
-- Set runtime path of "/usr/local/bin/opencv_version" to "/usr/local/lib:/usr/local/cuda-10.2/lib64"
-- Installing: /usr/local/bin/opencv_model_diagnostics
-- Set runtime path of "/usr/local/bin/opencv_model_diagnostics" to "/usr/local/lib:/usr/local/cuda-10.2/lib64"

Jetson Nano 相关的资料
算力相关参数是 CUDA_ARCH_BIN=“5.3”
CPU是4核的ARM make -j8(减少焦急等待的时间,老板已经在问编好没有了)

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值