Ubuntu 16.04 下 源码安装 opencv3.4(遇到各种坑之后安装成功)

Linux下自带 python2 和 python3,按道理来说是 安装pip 和 pip3  之后是可以直接安装 opencv的, 但是在使用时会遇到错误,cv2.imshow()函数出错,如下:

Ubuntu 16.04 下 源码安装 opencv3.4(遇到各种坑之后安装成功)_第1张图片

此时自己内心的os是非常难过的,就去网上查找答案,最终得出自己的结论是,利用pip安装得到的是别人已经配置好了环境的opencv,别人的电脑系统和一些配置与自己的是不一样的,所以就会出错。得出了如下可行的安装方案:

申明:源码安装的话可以在python2 和 python3 中同时安装opencv,这点是非常好的,并且在pytorch这样的包也推荐

使用源码安装

在安装之前进行更新

sudo apt update

sudo apt upgrade

sudo apt-get update

sudo apt-get upgrade


1、安装源码安装需要的编译环境 gcc cmake

sudo apt-get install build-essential pkg-config cmake cmake-gui

2、安装python的管理包pip

sudo apt-get install python-pip
sudo apt-get install python3-pip

3、安装python的数据分析包

pip install numpy scipy matplotlib scikit-image scikit-learn 
pip3 install numpy scipy matplotlib scikit-image scikit-learn

时间较长,如果觉得慢的话可以安装镜像(清华)

mkdir ~/.pip
vim ~/.pip/pip.conf
# 在pip.conf 中添加以下内容
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com

4、安装opencv的依赖包

sudo apt-get install checkinstall yasm gfortran git ffmpeg
sudo apt-get install libxvidcore4 libgtk-3-dev
sudo apt-get install libjpeg8-dev libjasper-dev 
sudo apt-get install libtiff5-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev
sudo apt-get install libxine2-dev libv4l-dev
sudo apt-get install libqt4-dev libgtk2.0-dev libtbb-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libfaac-dev libmp3lame-dev libtheora-dev
sudo apt-get install libvorbis-dev libxvidcore-dev
sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get install x264 v4l-utils

还有一些可选择的依赖包,也建议安装

sudo apt-get install libprotobuf-dev protobuf-compiler
sudo apt-get install libgoogle-glog-dev libgflags-dev
sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen

5、从官网上下载 opencv 源码安装包

https://sourceforge.net/projects/opencvlibrary/files/opencv-unix/3.4.0/opencv-3.4.0.zip/download?use_mirror=jaist

或者点这里下载最新的opencv版本

下载完成之后进入到解压的opencv3.4中,创建自己的built目录,用于安装配置环境

cd ~

cd opencv3.4.0

mkdir build

cd build

6、接下来是对opencv环境进行自己电脑的一个配置

在进入的build目录中进行如下的几个操作:

(1)cmake

cmake ../ -DCMAKE_BUILD_TYPE=RELEASE -DsCMAKE_INSTALL_PREFIX=/usr/local 这是最好的配置方法(我觉得)

其中也可以制定一些定制的环境等等,但是对于开始自己安装的话还是不要进行自己设置,后面自己熟悉了可以设置,类似于下面这样:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_C_EXAMPLES=ON \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D WITH_TBB=ON \
      -D WITH_V4L=ON \
      -D WITH_QT=ON \
      -D WITH_OPENGL=ON \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
      -D BUILD_EXAMPLES=ON ..

主要的目的是对自己的系统配置,设置的不好的话会报出cmake不成功的提示,如 WITH_QT=ON 主要是把opencv与 QT关联好,但是如果你的系统

上没有的话就不设置on 所以强烈建议按照上一种安装

此安装过程会有点久,中间可能会安装一个东西时间较长,安装之后就较快了,最终安装好了会如下显示

Ubuntu 16.04 下 源码安装 opencv3.4(遇到各种坑之后安装成功)_第2张图片


(2) sudo make -j2

j2 代表的是电脑的核心数,可以利用 nproc 指令在命令行查看 。此过程也会时间较长,等待一会就好

Ubuntu 16.04 下 源码安装 opencv3.4(遇到各种坑之后安装成功)_第3张图片

(3)sudo install make 对刚刚下载的make进行安装

(4)配置opencv在自己系统中的环境

用gedit打开/etc/ld.so.conf

sudo gedit /etc/ld.so.conf,在打开的空文件加上一行

/usr/local/lib 这是makfile文件的安装路径


再运行sudo ldconfig


修改bash.bashrc文件,sudo gedit /etc/bash.bashrc

在文件末尾加入:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

export PKG_CONFIG_PATH


到这里整个安装就完成了

然后进行测试,发现能够成功,且能够显示 cv2.imshow()



特别重要的问题:目前没找到opencv能够源码编译在anaconda上的方法,但是可以把编译在系统Py2或者Py3上的opencv直接复制到anaconda中

对于py2:

复制/usr/local/lib/python2.7/dist-packages/cv2.so文件到/home/chenbo/anaconda2/lib/python2.7/site-packages/中

对于py3:

复制/usr/local/lib/python3.6/site-packages/cv2.cpython-36m-x86_64-linux-gnu.so文件到/home/chenbo/anaconda3/lib/python3.6/site-packages/中去

对于编译之后opencv的链接文件有所不同,但是使用此种方法在anaconda中都能够导opencv, 使用import cv2 均不会报错


最后可能的问题

但是安装完成之后再次开启系统时,会出现不能正常的启动,出现如下的字眼

The system is running in low-graphics mode

此时可以通过一个简单且有效的方式进行解决

ctrl +alt +f2  强制进入命令行模式,然后进行

sudo apt update

sudo apt upgrade

sudo apt-get update

sudo apt-get upgrade

在开篇进行安装之前也进行了这样的操作就是为了防止这样的错误,在许多软件的安装中都有这样类似的更新,不知道这样的做能否

解决问题,在我的电脑上是可以解决的。该种安装的方式在Ubuntu 18.04上安装没有出现上诉的问题。


在自己解决的过程中参考的博客:

https://blog.csdn.net/gpwner/article/details/79179259

https://www.linuxidc.com/Linux/2017-10/147316.htm

https://blog.csdn.net/CSDNNETVIP/article/details/77951990

你可能感兴趣的:(机器学习)