最近需要在树莓派上做些图像处理
要用到opencv 因此就开始采坑之路…
(自带的python3.5 安装的是opencv3.4.0)

  • 前期准备 * 安装numpy
    * 把根目录扩大到整个SD卡
  • 安装opencv * 换源
    * 安装依赖库
    * 下载 解压opencv
    * 设置编译参数
    * 编译
    * 编译过程中出现的错误
    * 缺失文件 #include"boostdesc_bgm.i
    * 路径出错 include “opencv2/xfeatures2d/cuda.hpp”
    * 验证opencv
    * 使用opencv打开树莓派摄像头

前期准备

安装numpy

打开终端 使用pip3(pip默认指的是python2.7的pip)进行安装numpy依赖库

sudo pip3 install numpy

把根目录扩大到整个SD卡

(后续操作需要很大的空间 不进行扩展会卡住)

  1. 打开终端 输入以下命令 进入树莓派配置界面

sudo raspi-config

  1. 进入以下画面 (按方向键上下选择 回车确定 Esc退出)
  2. opencv4 树莓派 树莓派跑opencv流畅吗_树莓派

  3. 选择进入 7 Advanced Options (光标移动到7 回车)
    进入以下页面
  4. opencv4 树莓派 树莓派跑opencv流畅吗_树莓派_02

  5. 选择 A1 Expand Filesystem 回车
  6. 然后进行重启 打开终端 输入

sudo reboot

安装opencv

换源

先换源 不然下载会很慢
在终端直接执行以下两行命令,即可替换将官方默认软件源替换为中科大或清华镜像源。

中科大源

>sudo sed -i 's#://raspbian.raspberrypi.org#s://mirrors.ustc.edu.cn/raspbian#g' /etc/apt/sources.list 
>sudo sed -i 's#://archive.raspberrypi.org/debian#s://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian#g' /etc/apt/sources.list.d/raspi.list

清华源

> sudo sed -i 's#://raspbian.raspberrypi.org#s://mirrors.tuna.tsinghua.edu.cn/raspbian#g' /etc/apt/sources.list
sudo sed -i 's#://archive.raspberrypi.org/debian#s://mirrors.tuna.tsinghua.edu.cn/raspberrypi#g' /etc/apt/sources.list.d/raspi.list

更换源后,需要更新本地软件索引:

sudo apt-get update

安装依赖库
  1. 先更新一下

sudo apt-get update
sudo apt-get upgrade

  1. 安装build-essential、cmake、git和pkg-config

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

3.安装jpeg格式图像工具包

sudo apt-get install libjpeg8-dev

  1. 安装tif格式图像工具包

sudo apt-get install libtiff5-dev

  1. 安装JPEG-2000图像工具包

sudo apt-get install libjasper-dev

  1. 安装png图像工具包

sudo apt-get install libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

注意
每下载一个都要看一下是否下载成功(没有说出错就是成功)
如果网络情况不好或则源在国外会导致有些包下载不下来
尤其是libpng12-dev 33M左右 要注意如果下载失败没有注意到后面很麻烦还要重装

如果下载不下来重新下载 如果还是下载不了 就换源

下载 解压opencv
  1. 可以先下载后放入 /home/pi/Downloads目录下
    下载地址 opencv-3.4.0.zipopencv_contrib-3.4.0.zip

或者是使用wegt下载

  1. 打开终端 进入/home/pi/Downloads目录

cd /home/pi/Downloads

然后使用wegt下载

wget https://github.com/Itseez/opencv/archive/3.4.0.zip
wget https://github.com/Itseez/opencv_contrib/archive/3.4.0.zip

如果下载慢 可以到我的云盘上下载 地址 2. 解压 (要在 /home/pi/Downloads目录下)

sudo unzip opencv-3.4.0.zip opencv_contrib-3.4.0.zip

设置编译参数
  1. 进入 /home/pi/Downloadsopencv-3.4.0 文件夹下

cd /home/pi/Downloadsopencv-3.4.0

  1. 创建文件夹 build 并进入

sudo mkdir build
cd build/

  1. 输入编译参数

sudo 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=/home/pi/Downloads/opencv_contrib-3.4.0/modules -D BUILD_EXAMPLES=ON -D WITH_LIBV4L=ON PYTHON3_EXECUTABLE=/usr/bin/python3.5 PYTHON_INCLUDE_DIR=/usr/include/python3.5 PYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.5m.so PYTHON3_NUMPY_INCLUDE_DIRS=/home/pi/.local/lib/python3.5/site-packages/numpy/core/include ..

如果不懂Cmake的编译规则 就按照上面的路径 进行操作 这个地方就不需要改了

回车之后会进行下载一些文件之类的 进行配置Cmake

  1. 如果cmake成功 跳过下面的进行编译

opencv4 树莓派 树莓派跑opencv流畅吗_linux_03

  1. 如果cmake 失败
    倒数第三行 显示如下 这说明有问题需要重新做

Configuring incomplete,errors occurred!

(分析失败原因 如果是有很多文件没下载下来则进行换源)
如果cmake错误后,应该将build文件(里面有生成的makefile文件,和可执行文件)中的所有内容删除,
修改CMakelist.txt后,再进行cmake

编译

(占空间 并且费时间 四五个小时左右)

  1. 进入build目录下

cd /home/pi/Downloads/opencv-3.4.0/build

  1. 使用命令编译

sudo make

opencv4 树莓派 树莓派跑opencv流畅吗_opencv_04

  1. 编译出现的错误 下面单独讲
  2. 编译到100% 成功后
  3. opencv4 树莓派 树莓派跑opencv流畅吗_linux_05

  4. 安装

sudo make install

opencv4 树莓派 树莓派跑opencv流畅吗_树莓派_06


6. 更新动态链接库

sudo ldconfig

到这里,OpenCV的编译完成!

参考 子豪兄教你在树莓派上安装OpenCV参考树莓派学习(三)基于OpenCv的人脸识别参考

编译过程中出现的错误

编译出现的问题都是缺少文件或者路径不对,通过自行下载或者复制对应文件到对应路径解决。

缺失文件 #include"boostdesc_bgm.i
/home/pi/opencv_contrib-3.4.1/modules/xfeatures2d/src/boostdesc.cpp:653:37: fatal error: boostdesc_bgm.i: 没有那个文件或目录
           #include "boostdesc_bgm.i"
                                     ^
compilation terminated. ....

opencv4 树莓派 树莓派跑opencv流畅吗_树莓派_07

原因 :下载文件失败
解决办法:下载好文件放到目录中

  1. 文件地址
  2. 下载好之后 放入/home/pi/Downloads/ (可以使用ftp工具上传或者rz命令上传)
  3. 解压使用unzip命令

cd /home/pi/Downloads/
sudo unzip opencv3_cmake_files.zip

  1. 将文件夹里面所有后缀为i的文件 放入上面提到的文件夹内
    上面所说的找到文件的 目录是这个 所以这个也就是目标目录
    /home/pi/opencv_contrib-3.4.1/modules/xfeatures2d/src/ 需要复制的文件也就是
    /home/pi/Downloads/opencv3_cmake_files/* .i (具体情况要具体分析 目标目录可能不一致)
  2. 使用复制命令

sudo cp -i /home/pi/Downloads/opencv3_cmake_files/*.i /home/pi/opencv_contrib-3.4.1/modules/xfeatures2d/src/

  1. 重新编译 再次使用下面的命令进行编译

sudo make

之前编译好的会很快过去

参考

路径出错 include “opencv2/xfeatures2d/cuda.hpp”

打印出的错误信息:

/home/pi/opencv-3.4.1/modules/stitching/include/opencv2/stitching/detail/matchers.hpp:52:42: fatal error: opencv2/xfeatures2d/cuda.hpp: 没有那个文件或目录
 #include "opencv2/xfeatures2d/cuda.hpp"
                                          ^
compilation terminated.

路径出错 (代码中引用的是相对路径 因此会出错)
第一种方法 改为绝对路径

  1. 根据给的路径找到matchers.hpp的文件并打开,找到第42行如下:

#opencv2/xfeatures2d/cuda.hpp

  1. 找到opencv2/xfeatures2d/cuda.hpp的绝对路径
    使用find命令

sudo find / -name ‘cuda.hpp’ -print

opencv4 树莓派 树莓派跑opencv流畅吗_opencv4 树莓派_08

找到路径 /home/pi/Downloads/opencv_contrib-3.4.0/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.php

  1. 将相对路径改为绝对路径
    上面的第42行改为

#/home/pi/Downloads/opencv_contrib-3.4.0/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.php

参考

第二种解决办法 找到文件复制过来

上面已经讲了使用find命令找到文件

如果不想动代码 可以直接将 opencv2/xfeatures2d/cuda.hpp 复制到 目标出错的目录下
其中复制的不仅仅是cuda.hpp 而是 opencv2整个目录

使用find命令找到下载的文件

opencv4 树莓派 树莓派跑opencv流畅吗_opencv4 树莓派_09

解决问题后 使用

sudo make

进行编译

验证opencv

安装并没出错后

进入终端 输入

python3
import cv2

如果没报错 就说明大部分opencv没问题

opencv4 树莓派 树莓派跑opencv流畅吗_linux_10

使用opencv打开树莓派摄像头

opencv4 树莓派 树莓派跑opencv流畅吗_python_11

原因: ls /dev/无 video0

可以输入 sudo ls /dev/

看输出的有没有video0

opencv4 树莓派 树莓派跑opencv流畅吗_树莓派_12

1、输入 sudo raspi-config
先在interfacing option里把camera接口打开(enable)。

2、如果使用的是树莓派摄像头,还需输入sudo modprobe bcm2835-v4l2

输入这行命令,发现/dev/下已经有摄像头的设备了。

这句话相当于加载驱动模块,每次开机都要开启,摄像头才能使用。

opencv4 树莓派 树莓派跑opencv流畅吗_opencv_13


可以将这条命令放入 /etc/rc.local 文件中,让其自启动。