深度学习计算机视觉离不开的opencv库,从源码编译安装是最为完整和实用的,对于opencv库要求很高的情况下建议是从源码编译安装,博主最近尝试了一次在anaconda环境下编译opencv,也是先参考了博客上很多人的帖子,没有细数,这几天看过的帖子至少也有几十篇,真正实用的少之又少,很多是千篇一律或者就是直接复制别人的内容,这也让很多人走了很多弯路,这里把这个亲测通过的教程写出来,以供自己以后参考,也分享给同学们作为实质的参考。
下面开始。
注意事项:ubuntu16.04+anaconda+opencv-3.4.3+opencv_contrib-3.4.3
1.首先是安装Opencv依赖项
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev libxvidcore-dev libx264-dev
2.git下来需要的opencv源码
git clone https://github.com/opencv/opencv
git clone https://github.com/opencv/opencv_contrib
然后直接解压到根目录中
3.安装anaconda,这一步就不细说了,直接下载安装
4.进入到opencv根目录下
mkdir bulid && cd build
5.source进入conda环境下
source activate tf
6.重点来了,这一步也是非常关键的一步,参考了很多都有问题不可行
cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_V4L=ON -D WITH_OPENGL=ON -D WITH_VTK=ON .. -D CMAKE_BUILD_TYPE=RELEASE -D OPENCV_EXTRA_MODULES_PATH=/home/root1/opencv-3.4.3/opencv_contrib-3.4.3/modules -D WITH_IPP=OFF -D PYTHON_DEFAULT_EXECUTABLE=/home/root1/anaconda3/envs/tensorflow/lib/python3.6 -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON3_EXCUTABLE=/home/root1/anaconda3/envs/tensorflow/lib/python3.6 -D PYTHON3_INCLUDE_DIR=/home/root1/anaconda3/envs/tensorflow/include/python3.6m -D PYTHON3_LIBRARY=/home/root1/anaconda3/envs/tensorflow/lib/libpython3.6m.so.1.0 -D PYTHON_NUMPY_PATH=/home/root1/anaconda3/envs/tensorflow/lib/python3.6/site-packages -D BUILD_EXAMPLES=ON -D BUILD_LIBPROTOBUF_FROM_SOURCES=ON -D BUILD_opencv_hdf=OFF ..
这里给出的是亲测可行的,里面的编译选项是根据安装的anaconda路径设置的,只有这样设置才能在anaconda环境下可用,还有一些细节,继续往下。
7.上一步确保cmake成功,会出现
configuring down,generating down,building files has been written...
8.编译安装opencv
make -j8
sudo make install
sudo ldconfig
9.重点来了
找到" cv2.cpython-35m-x86_64-linux-gnu.so "文件的路径:
sudo find / -name "cv2.cpython-35m-x86_64-linux-gnu.so"
比如我是
/home/admin/anaconda3/pkgs/opencv3-3.1.0-py36_0/lib/python3.6/site-packages/cv2.cpython-35m-x86_64-linux-gnu.so
10.然后将这个文件替换成cv2.so
sudo su
cd /home/admin/anaconda3/pkgs/opencv3-3.1.0-py36_0/lib/python3.6/site-packages
cp cv2.cpython-35m-x86_64-linux-gnu.so cv2.so
11.之后将该cv2.so文件与anaconda路径下建立软链接
非常重要,这也是为什么很多人编译好opencv后在anaconda下无法import 成功的一个原因
cd /home/root1/anaconda3/envs/tensorflow/lib/python3.6/site-packages/
ln -s /home/root1/anaconda3/pkgs/opencv3-3.1.0-py36_0/lib/python3.6//site-package/cv2.so cv2.so
12.之后Python下import cv2还可能出错
比如报错:
ImportError: libopencv_xphoto.so.3.1: cannot open shared object file: No such file or directory
这样进行下一步(灰常重要!!):
sudo find / -name "libopencv_xphoto.so.3.1"
sudo su
cd /etc/ld.so.conf.d
nano opencv.conf
13.在nano opencv.donf 中添加我们依赖的路径
/usr/local/lib
/home/admin/anaconda3/pkgs/opencv3-3.1.0-py36_0/lib
注意这里的control + o是保存,control + x是退出,保存后退出,再次输入
sudo ldconfig -v