工具软件: cmake, git
sudo apt install cmake git
系统支持:
gcc 和 essential 开发包、libtbb(Intel 线程构建块)、GTK+ 2.x 或更高(包含header)、pkg-config
IO:zlib、libpng、libjpeg、libtiff、libjasper,并包含开发文件(xxx-dev)
Python支持:Python2.6或更高(包含开发包),Numpy
视频优化:来自ffmpeg的 libavcodec、libav*,安装 libav/ffmpeg 包。gstreamer 、 libdc1394 和 libv4l。
# Ubuntu 18.04默认安装了 gcc7.3.0 和 build-essential
sudo apt install gcc build-essential
sudo apt install libtbb-dev libtbb2
# 安装时,gtk3已经有,libgtk-3*
sudo apt install libgtk2.0-dev pkg-config
sudo apt install zlib1g-dev libpng-dev libjpeg-dev libtiff-dev
# 无法找到libjasper包,所以添加以下源
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt-get update
sudo apt install libjasper-dev
# 由于使用python3多一些,所以安装 python3 的相关包
sudo apt install python3-dev python3-numpy
sudo apt install libavcodec-dev libavformat-dev libavresample-dev libswscale-dev
# 以下4个视频读取库,只要安装 ffmpeg 就可安装
sudo apt install ffmpeg libdc1394-22-dev libv4l-dev liblapacke-dev
由于之前安装其他软件,以上的大多数库和包都已经安装,但是为了后续的安装顺利,还是都试着安装了一遍。
下载github上下载OpenCV源码,下载链接:
git clone --branch 3.4.5 https://github.com/opencv/opencv.git
git clone --branch 3.4.5 https://github.com/opencv/opencv_contrib.git
进入opencv的下载目录,创建 build
目录,并在该目录中进行编译。
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=/home/xiaotao/Packages/opencv_contrib/modules \
..
添加对pkg-config
的支持:
-D OPENCV_GENERATE_PKGCONFIG=ON
如果想生成Python 支持,则需要添加额外配置
-D PYTHON3_EXCUTABLE=/home/sn/anaconda3/bin/python3 \
-D PYTHON_INCLUDE_DIR=/home/sn/anaconda3/include/python3.7m \
-D PYTHON_LIBRARY=/home/sn/anaconda3/lib/libpython3.7m.so.1.0 \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/sn/anaconda3/lib/python3.7/site-packages/numpy/core/include/ \
# 官网的说明如下
PYTHON2(3)_EXECUTABLE = <path to python>
PYTHON_INCLUDE_DIR = /usr/include/python<version>
PYTHON_INCLUDE_DIR2 = /usr/include/x86_64-linux-gnu/python<version>
PYTHON_LIBRARY = /usr/lib/x86_64-linux-gnu/libpython<version>.so
PYTHON2(3)_NUMPY_INCLUDE_DIRS = /usr/lib/python<version>/dist-packages/numpy/core/include/
在 Anaconda 中, 默认Python环境(base)保存在 Anaconda 目录下,对于其他自己创建的环境,保存在 anaconda/envs/env_name
中。
在 cmake的过程中,任何配置的出错,都需要删除重新开始。
--Installing: /usr/local/lib/python3.6/site-packages/cv2/__init__.py
-- Installing: /usr/local/lib/python3.6/site-packages/cv2/load_config_py2.py
-- Installing: /usr/local/lib/python3.6/site-packages/cv2/load_config_py3.py
-- Installing: /usr/local/lib/python3.6/site-packages/cv2/config.py
-- Installing: /usr/local/lib/python3.6/site-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so
-- Set runtime path of "/usr/local/lib/python3.6/site-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so" to "/usr/local/lib"
-- Installing: /usr/local/lib/python3.6/site-packages/cv2/config-3.6.py
可以看到,生成的Python包被安装到了 /usr/local/lib/python3.6/site-packages/cv2
目录下,要为Anaconda中的python使用,需要复制到 Anaconda环境的相关目录。
复制到以上目录后,在 Anaconda 中导入 cv2,出现一下错误。
ImportError: /home/ss/anaconda3/bin/../lib/libfontconfig.so.1: undefined symbol: FT_Done_MM_Var
尝试各种办法无果,最终放弃。
2019-07-02
还好没放弃,因为需要 opencv_contrib
包,不得不再次尝试。
undefined symbol: FT_Done_MM_Var
错误的原因,libfontconfig.so.1
造成。其根本原因是,Anaconda的 lib
中,把 Python需要的各种 lib 单独列了出来,造成和系统中的库版本不一致。
系统库所在位置: /usr/lib/x86_64-linux-gnu/
,opencv 的 Python版本是按照系统库编译的,而在调用时,使用了 anaconda/lib
中的库。
libfontconfig.so.1
建立新的连接,指向系统库目录下的 libfontconfig.so.10.1
。libfontconfig.so.10.1
文件,替换 Anaconda目录下的 libfontconfig.so.11.1
经过以上的处理,可能会造成新的 undefined symbol
错误。毕竟依赖的库那么多,会有未知的坑等着。但解决方法类似。庆幸自己只改了两个就正常运行了。
起初使用 Anaconda 是为了方便不同的Python版本和环境的管理,最后发现,在需要编译安装某些库的时候, Anaconda带来了更多的麻烦。谨慎使用。
python中直接安装 opencv
sudo apt-get install python-opencv
pip install python3-opencv
make
sudo make install
进入到 opencv/build
目录,执行以下命令:
sudo make uninstall
pkg-config --cflags --libs opencv
能显示OpenCV库的相关位置信息,则安装成功。
部分博客中提到,要在 /usr/local/lib/pkgconfig/opencv.pc
文件进行如下更改:
# 添加
includedir_old2=${prefix}/include/opencv2
#最后一行修改为
Cflags: -I${includedir_old} -I${includedir_old2} -I${includedir_new}
但是在测试中,发现自己的系统加不加都一样。
OpenCV官网 https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html