ubuntu+anaconda环境下opencv+contrib源码编译:刚脱坑,写一篇实实在在的编译教程

深度学习计算机视觉离不开的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

14.经过一下下的等待,然后结束,键入Python,import cv,成功。

15.既然有安装就会有需要卸载,卸载的命令很容易,故不赘述。

猜你喜欢

转载自blog.csdn.net/Synioe/article/details/82814288