文章目录
前言
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(减少焦急等待的时间,老板已经在问编好没有了)