Ubuntu下安装OpenCV

写在最前面

现在已经可以用pip install opencv-python安装新版opencv-3.2.0,因此其实不需要看本教程了。

下载OpenCV源码

好像pip install的OpenCV版本都比较低,而且我尝试的时候报错,因此我用了“正统“的方式,即下载源码进行编译安装。
opencv-3.2.0.zip下载地址

安装依赖工具

我百度到了一个教程Linux平台上安装OpenCV

安装cmake

sudo apt-get install cmake

安装关联库

sudo apt-get install python-dev python-opencv python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

编译OpenCV源码

最好将OpenCV-3.2.0.zip移动到用户主目录下进行编译:
mv [OpenCV-3.2.0.zip存放路径] ~/opencv_3.2.0.zip
unzip opencv_3.2.0.zip
cd opencv-3.2.0
mkdir release
cd release

执行cmake

这里出现了一点小问题。第一次编译的时候,我没有workon在virtualenv的虚拟环境下,因此最终make install之后,cv2.so出现在了/usr/local/lib/python2.7/dist-packages文件夹内,即真实python环境里。然而我用的python环境是虚拟环境里,且版本问3.5.1, 因此我担心python版本不符合就workon后重新安装了一遍,结果仍然是在/usr/local/lib/python2.7/dist-packages中。原因是cmake的时候没有指定要用的python interpreter,而编译的结果是与interpreter有关的。并且要注意,make install之后要把cv2.so link到虚拟环境的site-packages文件夹内

cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON ..

注意,terminal中的输出有这么几行:

– Python 2:
– Interpreter: /usr/bin/python2.7 (ver 2.7.12)
– Libraries: /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.12)
– numpy: /usr/local/lib/python2.7/dist-packages/numpy/core/include (ver 1.12.1)
– packages path: lib/python2.7/dist-packages

– Python 3:
– Interpreter: /home/elijha/.virtualenvs/virtualenv-py3/bin/python3 (ver 3.5.1)

– Python (for build): /usr/bin/python2.7

我想用的是虚拟环境中的python3,则运行:

cmake \
-D PYTHON_DEFAULT_EXECUTABLE=$HOME/.virtualenvs/virtualenv-py3/bin/python3 \
-D PYTHON_INCLUDE_DIRS=\$HOME/.virtualenvs/virtualenv-py3/include/python3.5m \
-D PYTHON_EXECUTABLE=\$HOME/.virtualenvs/virtualenv-py3/bin/python3 \
-D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON ..

此时的输出为:

– Python 2:
– Interpreter: NO

– Python 3:
– Interpreter: /home/elijha/.virtualenvs/virtualenv-py3/bin/python3 (ver 3.5.1)

– Python (for build): /home/elijha/.virtualenvs/virtualenv-py3/bin/python

然而这里虽然Python (for build)改过来了,但是对应的interpreter下并没有Libraries、numpy、packages path,因此我不确定能不能成功。因为发现了pip install opencv-python这条命令,本篇文章完全基本失去了意义(微笑)。

具体含义我也不懂。接着出现了几个问题:

问题1:qmake: could not exec ‘/usr/lib/x86_64-linux-gnu/qt4/bin/qmake’: No such file or directory

这个的含义是,编译的过程中没有找到qmake。我进入了qmake: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake'这个目录,发现确实没有qmake这个东西。于是我安装了qt4-qmake:
sudo apt-get install qt4-qmake

问题2:下载ippicv_linux_20151201超级慢

这个问题应该是GFW的原因。我挂代理强行以几KB/S的速度下载了ippicv_linux_20151201.tgz
(参考: OpenCV 3.1下载 ippicv_linux_20151201失败
然后就是要把ippicv_linux_20151201.tgz移动到OpenCV的文件夹里,这样它在编译的时候找到该文件就不会下载了。(下列代码注意修改对应路径!)

ipp_file=~/ippicv_linux_20151201.tgz
ipp_hash=$(md5sum $ipp_file | cut -d” ” -f1) //生成.tgz的hash
ipp_dir=/home/elijha/opencv-3.2.0/3rdparty/ippicv/downloads/linux-$ipp_hash
mkdir -p $ipp_dir
cp $ipp_file $ipp_dir

这段代码最终就是在/home/elijha/opencv-3.2.0/3rdparty/ippicv/downloads目录里生成了linux-808b791a6eac9ed78d32a7666804320e并且把ippicv_linux_20151201.tgz考进去。

重新编译OpenCV

cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON ..

上面每条命令的具体含义我也不懂。看了多个教程,cmake的参数都不一样。另外有两个版本写在这里仅作记录:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

(大概30s)

make -j $(nproc) 1// $(nproc)是返回系统处理器数目,从而使得make命令使用全部处理器来加速运行

(大概要40min~1hour)

sudo make install

添加库路径:

sudo /bin/bash -c ‘echo “/usr/local/lib” > /etc/ld.so.conf.d/opencv.conf’

这句似乎不需要执行,因为在libc.conf文件中有相同的内容1

更新系统库:

sudo ldconfig

制作cv2.so的软链接:

ln -s /usr/local/lib/python2.7/site-packages/cv2.so /home/elijha/.virtualenvs/virtualenv-py3/lib/python3.5/site-packages


写在最后

几个编译opencv源码的教程:
Installation in Linux
Install OpenCV-Python in Fedora

另外,如果在import cv2的时候出现了错误undefined symbol: PyCObject_Type
那么可能是编译的时候出现了问题,我这里出现过,原因十有八九就是我编译的时候选错了interpreter(把3.X选成了2)

结束语:

编译的过程花了我一个下午,最终编译出来的cv2.so在import的时候依然报错,原因就是我没有指定要用的python interpreter。而在晚上的时候我发现pip install opencv-python可以安装最新版的opencv了,因而所有cmake、make、make install都没有了意义……万幸,已经可以用了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值