Ubuntu16.04下安装OpenCV3.2.0
opencv基本上是搞CV必备套件之一了,支持的语言也非常多,但是安装起来有点麻烦(如果是在conda下安装的话则可以用conda install -c menpo opencv3=3.2.0)。需要注意的是,pip可以安装的opencv-python安装并不依赖opencv,只是封装了opencv的Python API,一般情况下也够用。但是如果准备安装完整版本的opencv,这里比较建议将opencv-python卸载,以免之后产生一些不必要的报错。
通过官方文档和一些博客总结的安装流程大致如下:
1.安装官方给的opencv依赖包
GCC 4.4.x or later
CMake 2.6 or higher
Git
GTK+2.x or higher, including headers (libgtk2.0-dev) # 控制opencv GUI
pkg-config
Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy)
ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev
[optional] libtbb2 libtbb-dev
[optional] libdc1394 2.x
[optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev
sudoapt−getinstallbuild−essential
s
u
d
o
a
p
t
−
g
e
t
i
n
s
t
a
l
l
b
u
i
l
d
−
e
s
s
e
n
t
i
a
l
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev # 处理图像所需的包
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev # 处理图像所需的包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev # 处理视频所需的包
sudo apt-get install libxvidcore-dev libx264-dev # 处理视频所需的包
sudo apt-get install libatlas-base-dev gfortran # 优化opencv功能
$ sudo apt-get install ffmpeg
* 注:*其他一些包在之后的cmake的时候缺失的时候会进行安装,如果安装失败可以手动下载相应的包然后放入提示的目录下。而cmake下载tar.gz文件的时候可能不支持,需要进行配置,具体操作可以参考这里。
2.下载opencv3.2.0
这里需要下载opencv和opencv_contrib(后者会在cmake配置的时候用到),这是因为opencv3以后SIFT和SURF之类的属性被移到了contrib中,。
$ wget https://github.com/opencv/opencv/archive/3.2.0.zip # 从github上直接下载或者clone也可
$ wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip
3a.配置编译opencv (无NVIDIA CUDA版本)
将上述opencv包解压,然后cmake配置属性
cdopencv−3.2.0
c
d
o
p
e
n
c
v
−
3.2.0
mkdir build
cdbuild
c
d
b
u
i
l
d
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/home/fanzong/anaconda2/envs/tensorflow \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \
-D PYTHON_EXCUTABLE=/home/fanzong/anaconda2/envs/tensorflow/bin/python \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \ # 1
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D BUILD_EXAMPLES=ON .. # cmake命令的使用方式:cmake [] 。如果命令报错的话可以试着把-D后面的空格去掉在执行一次。
make−j4
m
a
k
e
−
j
4
sudo make install
sudo/bin/bash−c‘echo“/home/fanzong/anaconda2/envs/tensorflow/lib”>/etc/ld.so.conf.d/opencv.conf′
s
u
d
o
/
b
i
n
/
b
a
s
h
−
c
‘
e
c
h
o
“
/
h
o
m
e
/
f
a
n
z
o
n
g
/
a
n
a
c
o
n
d
a
2
/
e
n
v
s
/
t
e
n
s
o
r
f
l
o
w
/
l
i
b
”
>
/
e
t
c
/
l
d
.
s
o
.
c
o
n
f
.
d
/
o
p
e
n
c
v
.
c
o
n
f
′
sudo ldconfig
PS:1. 如果qt未安装可以删去此行;若因为未正确安装qt导致的Qt5Gui报错,可将build内文件全部删除后重新cmake,具体可以参考这里
CMAKE_INSTALL_PREFIX:安装的python目录前缀,其实就是指定了python模块的安装路径:CMAKE_INSTALL_PREFIX/lib/python2.7/dist-packages。获取该路径的方式可以用python -c “import sys; print sys.prefix”
PYTHON_EXCUTABLE:指定python路径
OPENCV_EXTRA_MODULES_PATH: 指定opencv所需模块的路径,就是之前我们所说的contrib
其他cmake的具体变量说明可以看这里
3.b 配置编译opencv (NVIDIA CUDA版本)
opencv最麻烦的地方就是编译是属性的配置,对于不同的需求要配置不同的属性。当使用NVIDIA GPU GeForce 1080ti的时候:
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \
-D PYTHON_EXCUTABLE=/usr/bin/python \
-D WITH_CUDA=ON \ # 使用CUDA
-D WITH_CUBLAS=ON \
-D DCUDA_NVCC_FLAGS=”-D_FORCE_INLINES” \
-D CUDA_ARCH_BIN=”5.3” \ # 这个需要去官网确认使用的GPU所对应的版本查看这里
-D CUDA_ARCH_PTX=”” \
-D CUDA_FAST_MATH=ON \ # 计算速度更快但是相对不精确
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \ # 如果qt未安装可以删去此行;若因为未正确安装qt导致的Qt5Gui报错,可将build内文件全部删除后重新cmake,具体可以参考这里
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D BUILD_EXAMPLES=ON ..
3.c 配置编译opencv(NVIDIA Jetson TX2开发板)
目前官方提供的opencv4tegra是2.4版本的,尚不支持3.2版本,所以需要自己编译。
$ cmake -D WITH_CUDA=ON \
-D CUDA_ARCH_BIN=”6.2” \ # 安装了6.2版本
-D CUDA_ARCH_PTX=”” \
-D WITH_OPENGL=ON \
-D WITH_LIBV4L=ON \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local ..
PS:不需要安装contrib包,否则之后调用摄像头调整分辨率的时候会失败。具体安装细节可以参考这里
编译成功时应该看到这些:
CUDA8.0
– Other third-party libraries:
– Use Cuda: YES (ver 8.0)
– NVIDIA CUDA
– Use CUFFT: YES
– Use CUBLAS: NO
– USE NVCUVID: NO
– NVIDIA GPU arch: 53
– NVIDIA PTX archs:
– Use fast math: NO
OpenGL
– GUI:
– GTK+ 2.x: YES (ver 2.24.30)
– OpenGL support: YES (/usr/lib/aarch64-linux-gnu/libGLU.so /usr/lib/aarch64-linux-gnu/libGL.so)
VideoIO
– Video I/O:
– DC1394 2.x: YES (ver 2.2.0)
– FFMPEG: YES
– codec: YES (ver 54.92.100)
– format: YES (ver 54.63.104)
– util: YES (ver 52.18.100)
– swscale: YES (ver 2.2.100)
– gentoo-style: YES
– GStreamer:
– base: NO
– video: NO
– app: NO
– riff: NO
– pbutils: NO
– V4L/V4L2: Using libv4l (ver 1.0.0)
注:GPU版本安装的时候很容易出错,这里说的出错并不是编译报错,而是在python中调用的时候报错,比如cv2.VideoCapture(0)返回false,cv2.imshow()的时候报unspecified error。在调用cv2的时候报错一般都是在cmake配置编译的时候由于配置错误导致的,所以需要确认配置的参数是否能够覆盖到你所需的范围。
关于GPU版本的安装也可以参考下这里,写得更加详细清楚。
4.完成安装并测试
安装完成以后,重启下机器。编译之后应该会在CMAKE_INSTALL_PREFIX/lib/python2.7/dist-packages/目录下找到cv2.so。打开python console,检测opencv版本python -c “import cv2; print cv2.version“。如果正确安装的话则会输出3.2.0。
PS:如果import的时候报类似于error while loading shared libraries: libopencv_core.so.3.0: cannot open shared object file: No such file or directory.的错误,可能是library环境变量的错误,可以尝试将export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib加入到~/.bashrc中然后source。