[Ubuntu 18.04][Anaconda3]OpenCV-4.4.0安装¶
使用OpenCV
源码进行编译和安装
参考:
Install OpenCV-Python in Ubuntu
依赖¶
安装以下依赖文件,其中使用Anaconda
安装Python
相关依赖:
# For C++
[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
# For Python
pip install numpy
[required] sudo apt install cmake gcc g++ libavcodec-dev libavformat-dev libswscale-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libgtk2.0-dev libgtk-3-dev
[optional] sudo apt-get install libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev
源码¶
同一路径下下载OpenCV
以及OpenCV_Contrib
源码
$ git clone https://github.com/opencv/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git
切换到4.4.0
版本
$ cd opencv
$ git checkout -b 4.2.0 4.2.0
$ cd ../opencv_contrib
$ git checkout -b 4.2.0 4.2.0
编译¶
在opencv/opencv_contrib
同一路径下新建文件夹build/install
,分别用于存放构建文件以及编译文件
$ mkdir build
$ mkdir install
$ ls
build install opencv opencv_contrib
编写构建脚本build.sh
#!/bin/bash
set -eux
cd build
cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=../install \
-D BUILD_DOCS=ON \
-D BUILD_EXAMPLES=ON \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_python2=OFF \
-D PYTHON3_EXECUTABLE=/home/zj/anaconda3/bin/python \
-D PYTHON3_LIBRARY=/home/zj/anaconda3/lib/libpython3.7m.so \
-D PYTHON3_INCLUDE_DIR=/home/zj/anaconda3/include/python3.7m \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/zj/anaconda3/lib/python3.7/site-packages/numpy/core/include \
-D Pylint_DIR=/home/zj/anaconda3/bin/pylint \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D WITH_FREETYPE=ON \
../opencv
make -j8
make install
执行构建脚本,完成OpenCV C++
以及Python
库编译
python¶
编译完成后在install/lib
文件夹内生成了python3.7
,将其中的cv2
文件夹软链接方式复制到Anaconda
中
$ cd ~/anaconda3/lib/python3.7/site-packages
$ ln -s ~/opencv/opencv-4.4.0/install/lib/python3.7/site-packages/cv2 cv2
测试cv2
是否载入
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/zj/anaconda3/lib/python3.7/site-packages/cv2/__init__.py", line 96, in <module>
bootstrap()
File "/home/zj/anaconda3/lib/python3.7/site-packages/cv2/__init__.py", line 86, in bootstrap
import cv2
ImportError: /home/zj/anaconda3/bin/../lib/libfontconfig.so.1: undefined symbol: FT_Done_MM_Var
参考:ubuntu18.04 with anaconda3 编译 opencv3.4.7
是因为Anaconda
自带的libfontconfig.so.1.12.0
版本过高所致
$ ls libfontconfig.
libfontconfig.a libfontconfig.so libfontconfig.so.1 libfontconfig.so.1.12.0
将/usr/lib/x86_64-linux-gnu/libfontconfig.so.1.10.1
复制到Anaconda
中,替换当前链接
$ cd
$ cp /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.10.1 .
$ file libfontconfig.
libfontconfig.a libfontconfig.so.1 libfontconfig.so.1.12.0
libfontconfig.so libfontconfig.so.1.10.1
$ file libfontconfig.so.1
libfontconfig.so.1: symbolic link to libfontconfig.so.1.12.0
$ ln -s libfontconfig.so.1.10.1 libfontconfig.so.1
ln: 无法创建符号链接'libfontconfig.so.1': 文件已存在
$ rm libfontconfig.so.1
$ ln -s libfontconfig.so.1.10.1 libfontconfig.so.1
$ file libfontconfig.so.1
libfontconfig.so.1: symbolic link to libfontconfig.so.1.10.1
遇到类似的问题使用相同的操作即可,或者参考在装有python3.6的Anaconda3虚拟环境中安装opencv3.4.4,将lib
下的链接文件删除也行(这样就会寻找/usr/lib
下的库文件了)
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/zj/anaconda3/lib/python3.7/site-packages/cv2/__init__.py", line 96, in <module>
bootstrap()
File "/home/zj/anaconda3/lib/python3.7/site-packages/cv2/__init__.py", line 86, in bootstrap
import cv2
ImportError: /home/zj/anaconda3/bin/../lib/libpangoft2-1.0.so.0: undefined symbol: FcWeightFromOpenTypeDouble
# 解决
~/anaconda3/lib$ mv libpangoft2-1.0.so.0 libpangoft2-1.0.so.0_bak
自编译的cv2
无法查看函数定义,在PyCharm
中会出现
Cannot find reference 'imwrite' in '__init__.py'
所以在实际开发过程中,可以使用opencv-python;在生产环境再使用自编译库