浏览量: 453 次浏览

树莓派安装opencv以及各种采坑

2020年2月24日 0 作者 Nie Hen

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

前期准备

安装numpy

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

sudo pip3 install numpy

把根目录扩大到整个SD卡

(后续操作需要很大的空间 不进行扩展会卡住)
1. 打开终端 输入以下命令 进入树莓派配置界面

sudo raspi-config

  1. 进入以下画面 (按方向键上下选择 回车确定 Esc退出)
    enter description here

  2. 选择进入 7 Advanced Options (光标移动到7 回车)
    进入以下页面
    enter description here

  3. 选择 A1 Expand Filesystem 回车

  4. 然后进行重启 打开终端 输入

    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

  2. 安装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

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

    sudo apt-get install libjasper-dev

  3. 安装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.zip
    opencv_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

  2. 创建文件夹 build 并进入

    sudo mkdir build
    cd build/

  3. 输入编译参数

    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成功 跳过下面的进行编译

enter description here

  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

enter description here

  1. 编译出现的错误 下面单独讲

  2. 编译到100% 成功后
    enter description here

  3. 安装

    sudo make install

enter description here
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. ....

enter description here

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

  1. 下载好之后 放入/home/pi/Downloads/ (可以使用ftp工具上传或者rz命令上传)

  2. 解压使用unzip命令

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

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

  4. 使用复制命令

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

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

    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
    enter description here

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

  2. 将相对路径改为绝对路径
    上面的第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命令找到下载的文件
enter description here

解决问题后 使用

sudo make

进行编译

验证opencv

安装并没出错后

进入终端 输入

python3
import cv2

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

使用opencv打开树莓派摄像头

enter description here

原因: ls /dev/无 video0
可以输入 sudo ls /dev/
看输出的有没有video0
enter description here

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

2、如果使用的是树莓派摄像头,还需输入sudo modprobe bcm2835-v4l2
输入这行命令,发现/dev/下已经有摄像头的设备了。
这句话相当于加载驱动模块,每次开机都要开启,摄像头才能使用。
enter description here
可以将这条命令放入 /etc/rc.local 文件中,让其自启动。

参考这篇文章