ubuntu20.04手动编译opencv 4.9.0遇到的问题汇总

编译流程

以4.9.0版本为例,可参考:

  • https://docs.opencv.org/4.9.0/d2/de6/tutorial_py_setup_in_ubuntu.html
  • https://linuxize.com/post/how-to-install-opencv-on-ubuntu-20-04/
  • https://blog.csdn.net/weixin_44003563/article/details/90404745
  • https://www.mintimate.cn/2021/11/07/installOpenCV/#%E5%AF%BC%E5%85%A5Python
  • https://blog.csdn.net/qq_25005909/article/details/78554469(主要参考)
  • opencv联合编译ffmpeg_opencv ffmpeg编译-CSDN博客

分享下我的命令:

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

cd opencv
mkdir build
cd build


sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D  CMAKE_INSTALL_PREFIX=/usr/local/opencv -D CUDA_GENERATION=Auto OPENCV_EXTRA_MODULES_PATH=/home/user/yuanjinmin/opencv_contrib/modules/ -D BUILD_opencv_python3=ON -D PYTHON_DEFAULT_EXECUTABLE=/home/user/anaconda3/envs/yjm_slowfast/bin/python3.9  -D PYTHON3_LIBRARIES=/home/user/anaconda3/lib/libpython3.9.so -D PYTHON3_NUMPY_INCLUDE_DIRS=/home/user/anaconda3/envs/yjm_slowfast/lib/python3.9/site-packages/numpy/core/include -D PYTHON3_EXECUTABLE=/home/user/anaconda3/envs/yjm_slowfast/bin/python3.9 -D WITH_FFMPEG=ON ..

sudo make -j8 # 结合自己服务器线程

sudo make install

sudo ldconfig

export PYTHONPATH="$PYTHONPATH:/usr/local/opencv/lib/python3.9/site-packages" # 好像可以手动将其中的cv2复制到对应虚拟环境中的`site-packages`文件夹,也可以使用

python3 -c "import cv2; print(cv2.__version__)"

编译加速

https://blog.csdn.net/tfb760/article/details/104030841

ippicv_2021.10.0_lnx_intel64_20230919_general.tgz下载慢

可参考:https://blog.csdn.net/orDream/article/details/84311697

face_landmark_model.dat下载

可参考:https://blog.csdn.net/pzb19841116/article/details/115519158#comments_32285782

ubuntu20.04下编译opencv4.9.0时报错

/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_type_uint32@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_type_sint32@LIBFFI_BASE_7.0’
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_type_pointer@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_type_void@LIBFFI_BASE_7.0’
/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_prep_cif@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to ffi_call@LIBFFI_BASE_7.0’

可参考:https://blog.csdn.net/special00/article/details/135100639
2.

Cannot generate a safe runtime search path for target opencv_imgcodecs
because files in some directories may conflict with libraries in implicit

参考:https://blog.csdn.net/cunyizhang/article/details/124968204

ImportError:libgobject-2.0.so.0: undefined symbol: ffi_type_uint32, version

使用export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libffi.so.7之后在此窗口运行python项目可以解决(每个新命令行中都要设置,除非放入.bashrc中,或在IDE中配置路径)

The imported target “openjp2_static” references the file “/usr/lib/x86_64-linux-gnu/libopenjp2.a” but this file does not exist. Possible reasons include: …

报类似于https://github.com/opencv/opencv/issues/18090这样的错误,不用管

fatal error: numpy/ndarrayobject.h: No such file or directory · Issue #11709 · opencv/opencv (github.com)

pip install numpy

忘记装numpy了

ffmpeg支持

  1. 使用ffmpeg -version查看是否安装ffmpeg;
  2. 在编译opencv时加入-D WITH_FFMPEG=ON 的cmake参数
  3. 执行cmake命令后可以查看,也可以安装pip库后查看

VideoCapture can’t open RTSP stream [FIXED] - Python - OpenCV

在这里插入图片描述

gstreamer支持

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
  • 正确示范
    在这里插入图片描述
  • 错误示范
    在这里插入图片描述

Todo(未验证)

gpu加速

命令
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

cd opencv
mkdir build
cd build


sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv \
-D CUDA_GENERATION=Auto \
-D OPENCV_EXTRA_MODULES_PATH=/home/user/yuanjinmin/opencv_contrib/modules/ \
-D BUILD_opencv_python3=ON \
-D PYTHON_DEFAULT_EXECUTABLE=/home/user/anaconda3/envs/yjm_CAIP/bin/python3.9  \
-D PYTHON3_LIBRARIES=/home/user/anaconda3/lib/libpython3.9.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/user/anaconda3/envs/yjm_CAIP/lib/python3.9/site-packages/numpy/core/include \
-D HAVE_opencv_python3=ON \
-D PYTHON3_EXECUTABLE=/home/user/anaconda3/envs/yjm_CAIP/bin/python3.9 \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D CUDA_ARCH_BIN=8.6 \
-D WITH_CUBLAS=1 \
-D BUILD_EXAMPLES=ON \
-D BUILD_opencv_world=ON \
-D BUILD_CUDA_STUBS=ON \
-D WITH_FFMPEG=ON ..

sudo make -j8 # 结合自己服务器线程

sudo make install

sudo ldconfig

export PYTHONPATH="$PYTHONPATH:/usr/local/opencv/lib/python3.9/site-packages" # 好像可以手动将其中的cv2复制到对应虚拟环境中的`site-packages`文件夹,也可以使用

python3 -c "import cv2; print(cv2.getBuildInformation())"
说明
  1. opencv 4.9.0好像不支持cuDNN 9.0以上的版本:Built target opencv_cudafilters make error · Issue #25929 · opencv/opencv。但我好像用opencv 4.11.0还是会报错:CUDA backend requires cuDNN.
参考
  1. 编译带 CUDA 模块的 OpenCV | 个人笔记
  2. 安装支持cuda的OpenCV过程记录_c++ opencv安装的时候如何带上显卡-CSDN博客
  3. 【小白用】在Ubuntu上安装OpenCV任何版本+Contrib库+CUDA兼容
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐