整整搞了一天,参考了好多文章,其实大体的思路都差很少,可是不少细节方面,仍是有很是大的坑,记录一下,但愿能帮到你们。
提醒:先确保有足够大的空间,最好要预留3,4G的剩余空间吧。html
老步骤,在进行软件安装以前首先要更新一下现有的软件包:python
sudo apt-get update sudo apt-get upgrade #更新系统,慎重选择
注意:apt-get update 你要作一下,可是apt-get upgrade除非你安装不成功,不然不要运行,时间有可能会很长...linux
安装cmake:c++
sudo apt-get install build-essential cmake pkg-config
安装各类图像格式的包:git
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
安装视频I/O包:github
sudo apt-get install libavcodec-dev libavformat-dev libswcale-dev libv4l-dev sudo apt-get install libxvidcore-dev libx264-dev
安装GTK开发库:windows
sudo apt-get install libgtk2.0-dev
再安装几个依赖关系进一步优化OpenCV:app
sudo apt-get install libatlas-base-dev gfortran
确认下python开发环境的安装(能够不作):python2.7
sudo apt-get install python2.7-dev python3-dev
我在~下新建一个opencv的文件夹,用来存放接下来要用的各类东西。而后切换到这个目录下。优化
cd~ mkdir opencv cd opencv
下载opencv 3.1源代码
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip unzip opencv.zip
全面安装后,咱们还需抓取OpenCV的contrib的存储库:
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip unzip opencv_contrib.zip
警告:opencv和opencv_contrib的版本必定要相同!!!!
注意:不少文章中此处是用git下载源代码的,可是opencv比较大,下载源代码的话时间将会很长。用wget的方式下载压缩包时间可控点。最省时间的方法:在windows下用迅雷下载这两个zip文件,而后放到树莓派下解压缩,这种时间最少。
那就是:virtualenv和virtualenvwrapper
我已经写了一篇文章了,具体安装过程参考:
https://my.oschina.net/u/2396236/blog/1632522
新建虚拟环境
virtualenv和virtualenvwrapper安装配置完成后,新建一个名为opencv的python3虚拟环境
mkvirtualenv -p /usr/bin/python3 opencv
确认本身已经进入了这个虚拟环境,假如没有进入,须要用workon进入虚拟环境
workon opencv
进入虚拟环境后,在命令行的左侧的括号内会出现虚拟环境的名字
接下来咱们的操做,就是在名为opencv的虚拟环境中完成的,这个虚拟环境使用python3建立的。
numpy是opencv的依赖包,要先在虚拟环境中安装一下。
pip install numpy
接着咱们使用CMake设置构建:
cd ~/opencv/opencv-3.1.0/ mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-3.1.0/modules \ -D BUILD_EXAMPLES=ON ..
注意:这里格外须要注意下OPENCV_EXTRA_MODULES_PATH这个参数,要指定你本身的opencv contrib目录地址
接下来就要进行编译了
make
大部分文章会建议用
make -j4
来调用4个核心来编译,时间大大缩短。可是听说这样不是太稳定,容易出错。我直接用make命令单核心编译的,花了差很少4个小时,听说用4核心,差很少一个半小时。你们不妨一试。
make的过程当中,极可能报以下的错,让人倒吸一口凉气:
Generating precomp.hpp.gch/opencv_core_Release.gch 2 In file included from /usr/include/c++/6/bits/stl_algo.h:59:0, 3 from /usr/include/c++/6/algorithm:62, 4 from /opt/opencv/opencv-3.1.0/modules/core/include/opencv2/core/base.hpp:53, 5 from /opt/opencv/opencv-3.1.0/modules/core/include/opencv2/core.hpp:54, 6 from /opt/opencv/opencv-3.1.0/modules/core/include/opencv2/core/utility.hpp:52, 7 from /opt/opencv/build/modules/core/precomp.hpp:49: 8 /usr/include/c++/6/cstdlib:75:25: fatal error: stdlib.h: 没有那个文件或目录 9 #include_next <stdlib.h>
参考http://www.javashuo.com/article/p-udgugglh-eq.html
大概的意思是/usr/include/c++/6/cstdlib文件中的include_next在这里很差使,得老老实实用include代替。因而咱们须要修改报错部分的源代码,将include_next 修改为 include。make的过程当中,大概有两处须要按此修改。就好了。
等漫长的编译100%完成后,终于能够安装了
安装opencv
sudo make install sudo ldconfig
为虚拟环境引用类库
若是是python3+虚拟环境,将编译好的so文件,连接到虚拟环境中。
cd ~/.virtualenvs/opencv/lib/python3.5/site-packages/ ln -s /usr/local/lib/python3.5/dist-packages/cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
注意,此处又有坑:
全部文章中都指出编译好的so文件,位于/usr/local/lib/python3.5/site-packages,文件名为cv2.so。
我试验过两次,cv2.so原始文件名应该是cv2.cpython-35m-arm-linux-gnueabihf.so。两次生成的目录名竟然不同:
第一次:/usr/local/lib/python3.5/下根本没有site-packages目录,只有一个dist-packages目录,dist-packages下也没有cv2.so文件,却有一个cv2.cpython-35m-arm-linux-gnueabihf.so文件,这就是opencv编译好之后的文件。
第二次:site-packages存在,cv2.cpython-35m-arm-linux-gnueabihf.so文件在site-packages目录下。缘由不明。我感受好慌....
python >>> import cv2 >>> print(cv2.__version__) 3.1.0
若成功显示版本号,则opencv安装成功。
删除下载解压缩的文件和文件夹,这些文件和文件夹都很占用空间:
opencv_contrib.zip opencv.zip opencv_contrib-3.0.0/ opencv-3.0.0/
本文从如下文章中获得启发和借鉴,在此表示感激:
http://blog.csdn.net/layallan/article/details/78328943
http://lib.csdn.net/article/opencv/28889
http://blog.csdn.net/autoliuweijie/article/details/52826645
https://www.jianshu.com/p/67293b547261
http://www.javashuo.com/article/p-udgugglh-eq.html