准备一片树莓派3B+,一张16G SD卡,一个读卡器,一个显示器,三个工具软件(SDFormatter,FileZilla Pro,Win32DiskImager),自行百度下载,也可以评论留言索取
先将 SD 卡插上读卡器,使用 SDFormatter 格式化:
使用 Win32DiskImager 烧录系统:RPI 系统下载
我使用系统为:2018-03-13-raspbian-stretch.img
需要系统可以自行下载或者留言索取,常见版本年份系统我基本具有,注意烧录系统要兼容树莓派硬件,不然会出现上电彩屏
系统烧录:打开 Win32DiskImager 选择想要烧录的系统,点击 write
烧录完成会出现如下“状况”, Win32DiskImager 显示 Successful
此系统的wifi需要设置 WiFi Country,否则显示 No APs found scanning… 在 Raspberry Pi Configration 下可以直接设置比较方便,选择 Localisation 选择 Set WiFi Country 设置为 CN China,然后 Reboot,之后等待一会就能搜寻到WiFi,连接WiFi
PS:有的系统没有此项,如果开机能连接 WiFi 则跳过此步
设置键盘模式(需要设置美式键盘,默认为英式键盘):在 Set WiFi Country 页面有 Set Keyboard 并点击,选择 United States → English(US, alternative international)
PS:有的系统默认美式,鉴别方法看能否打出 # 号,英式为£符号
在 Raspberry Pi Configuration 下选择 Interfaces 选项卡,在 SSH 设置为 Enabled,方便使用 FileZilla Pro 传输文件
需要修改
/etc/apt/sources.list
/etc/apt/sources.list.d/raspi.list
先赋予权限以便修改
sudo chmod 777 /etc/apt/sources.list
sudo chmod 777 /etc/apt/sources.list.d/raspi.list
sudo nano /etc/apt/sources.list
sudo nano /etc/apt/sources.list.d/raspi.list
也可以在文件夹下打开修改
sources.list 用 # 注释所有行并添加如下,我换用清华的源,换用其他如,中科大,阿里云自行百度添加内容
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
raspi.list 用 # 注释所有行并添加如下
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
然后输入
sudo apt-get update
sudo apt-get upgrade
Y
q
Y 为确认安装,q 为安装途中会提示按 q 退出一个文件,这两步加起来时间稍长,坐等
输入命令并选择输入Y即可
sudoapt-get install xrdp
Y
ifconfig
也可以使用手机软件 fing,连接在同一 WiFi 就能扫描到树莓派 ip,安卓苹果都有,界面如下(PS:我拥有两台正在工作的树莓派,所以我有两个 ip)
打开远程桌面,输入ip即可连接,连接后输入用户名与密码就可以登陆树莓派界面,这种界面通常比较卡,还是建议买个屏幕,双11,618,双12,年货节,又不太贵
输入如下
sudo apt-get install scim-pinyin
前面几步也可以使用命令行
sudo raspi-config
↑↓用来选择行项,←→用来选择底部两个按钮
选择 Localisation Options
具有四项设置,选择需要设置项就行
Change Locale
Change Timezone
Change Keyboard
Layout Change Wi-Fi country
OpenCV具有Linux教程,可以借鉴:Linux教程
OpenCV Python安装
sudo apt-get install libatlas-base-dev
sudo apt-get install python-tk
sudo apt-get install libjpeg-dev libtiff5-dev libjsaper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install qt4-dev-tools
sudo pip3 install opencv-python
整体来讲
sudo apt-get install libatlas-base-dev python-tk libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev qt4-dev-tools opencv-python
安装成功
C++安装依赖,参考OpenCV官网教程:进入OpenCV官网,点击 tutorial→Introduction to OpenCV→Installation in Linux 即可看见
[编译器] sudo apt-get install build-essential
[必需] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
[可选] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
[可视化] sudo apt-get install cmake-qt-gui
命令中既安装了 cmake(命令行方式安装)也安装了 cmake-qt-gui(界面式安装),参考我的一篇博客Qt 工程下使用 cmake MinGW OpenCV 4.1.1(涵盖 MinGW32 与 MinGW64)就是使用后gui编译,主要是易于可视化
在 programming 下可以看见 cmake 程序,点击启动
获取 OpenCV 源码,为了与 Python 版本匹配,我们选择 OpenCV-4.1.1 的源码,点击 Sources 即可下载,由于我之前的博客已经下载有 OpenCV-4.1.1,所以我直接利用 Filezilla Pro 上传到树莓派,需要软件的朋友可以留言索取,安装并打开 Filezilla Pro
名称 | 输入 |
---|---|
主机(H): | sftp://192.168.xx.xx(为你的树莓派ip) |
用户名(U): | xx(树莓派用户名) |
密码(W): | xxxx(树莓派密码) |
端口§: | 不用管,SSH默认 Port 22 |
点击快速连接,确定,找到所在文件夹,上传即可,时间稍久,休息片刻
传输完成,可以在你选中的树莓派文件目录发现 sources 文件夹,默认为 /home/pi 目录
在你喜欢的地方创建一个文件夹 build,你可以使用 Terminal 输入,为了方便截图,我采用远程桌面操作
mkdir build
也可以在文件夹目录下 Create New → Folder 来创建
Where is the source code:/home/pi/sources
Where to build the binaries:/home/pi/build
点击 Configure 使用默认的 Unix Makefiles(因为 Linux 都是基于 Unix 开发),点击Finish,坐等直到Configuring done
Configure done 后,我们需要调整配置,首先去掉 Python2,Python3 的安装,因为我们可以直接使用 pip 命令来安装 Python OpenCV,取消也是避免对已安装的Python Opencv 产生影响,你甚至可以取消 java 的勾选(我没有取消,因为没有影响,懒得取消),修改后再次点击 Configure,完成后点击 Generate
完成
Terminal 进入 build 文件夹 输入可选如下(4代表线程数,你可以使用其他数字例如2,3,5,7等,多线程编译快,但容易卡死,我就曾卡死在 89%,我使用命令为:sudo make)
(路径)cd build
(普通)make
(或者)make -j4
(或者)sudo make
(或者)sudo make -j4
开始编译,时间极长,睡一觉吧
编译完成如下
还是在build文件夹下,直接输入
sudo make install
安装速度较快
安装完成如下
更新动态链接库
sudo ldconfig
完成如下
出现树莓派运行 .sh 出现 Permission denied,这表明编译过程中权限不足,需要赋予文件权限,比如我在编译时出现 ./precomp.hpp.command.sh: Permission denied,全部信息如下
[ 26%] Generating precomp.hpp
[ 26%] Generating precomp.hpp.gch/opencv_imgproc_Release.gch
/bin/sh: 1: ./precomp.hpp.command.sh: Permission denied
modules/imgproc/CMakeFiles/pch_Generate_opencv_imgproc.dir/build.make:63: recipe for target 'modules/imgproc/precomp.hpp.gch/opencv_imgproc_Release.gch' failed
make[2]: *** [modules/imgproc/precomp.hpp.gch/opencv_imgproc_Release.gch] Error 126
CMakeFiles/Makefile2:2024: recipe for target 'modules/imgproc/CMakeFiles/pch_Generate_opencv_imgproc.dir/all' failed
make[1]: *** [modules/imgproc/CMakeFiles/pch_Generate_opencv_imgproc.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2
阅读发现 modules/imgproc/precomp.hpp.command.sh,权限不足,说明全路径为 /home/pi/build/modules/imgproc/precomp.hpp.command.sh 权限不足,我在 /home/pi/build/modules 搜索 precomp.hpp.command.sh 发现基本 modules 下每个模块都具有这个文件
所以需要对 modules 文件夹所有文件赋予权限,输入示例为
sudo chmod 777 -R ./folder,folder为你的文件夹
sudo chmod 777 -R ./modules
sudo make
即可正常运行,编辑时间很长,睡一觉吧
直接在Terminal下输入
sudo apt-get install qt5-default
sudo apt-get install qtcreator
每次提示安装输入 Y 就行,两次安装完成如下,在 Programming 下具有 Qt Creater 快捷方式,Qt4 系列是安装 OpenCV 依赖库时安装的,此时树莓派具有 Qt5 与 Qt4,下面我们将打开Qt Creator 设置相应变量与环境
打开 Qt Creator → Tools → Options → Build & Run → Compilers
点击 Manual 下的 C++,右边点击 Add → GCC → C++
Compiler path:/usr/bin/arm-linux-gnueabihf-g++
同理 点击 Manual 下的 C,右边点击 Add → GCC → C
Compiler path:/usr/bin/arm-linux-gnueabihf-gcc
点击 Apply
选择 Kits 选项卡,点击 → Manual → Desktop,只需修改 Compiler 与 Device type,其余用不着修改(虽然你可以修改 Name 为一个 NB 的名字,但根本用不着)
Device type 选择为 Desktop
Compiler 点击 Manage 选择 C++ 下的 GCC
修改完成后如下,点击 OK
(PS:Compiler 也可以选择 C 下的 GCC,有一丝微妙的差别,C++ 是图片跟 MainWindow 窗口同时出来,C 是先出来图片,× 掉后再出来 MainWindow 窗口,手动滑稽*)*
FIle → New File or Project → Choose(默认) → Next(设置Name:test,路径默认) → Next (Kits 默认 Desktop,如果你改了名字就用你改后那个名字,点击Manage[鼠标放在 Desktop 上才显示]) → Next → Next → Finish,界面完成如下
sudo make install 完成信息有如下显示
信息如下,我们可以发现其 install 路径为 /usr/local/include/opencv4,如上图显示所示
-- Up-to-date: /usr/local/include/opencv4/opencv2/objdetect/objdetect.hpp
-- Up-to-date: /usr/local/lib/libopencv_stitching.so.4.1.1
-- Up-to-date: /usr/local/lib/libopencv_stitching.so.4.1
-- Up-to-date: /usr/local/lib/libopencv_stitching.so
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/warpers.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/detail/autocalib.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/detail/blenders.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/detail/camera.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/detail/exposure_compensate.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/detail/matchers.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/detail/motion_estimators.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/detail/seam_finders.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/detail/timelapsers.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/detail/util.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/detail/util_inl.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/detail/warpers.hpp
-- Up-to-date: /usr/local/include/opencv4/opencv2/stitching/detail/warpers_inl.hpp
所以test.pro添加如下l两行
INCLUDEPATH += /usr/local/include/opencv4
LIBS += /usr/local/lib/libopencv_*.so
修正后如下
main.cpp修改如下
#include "mainwindow.h"
#include
#include
#include
using namespace cv;
int main(int argc, char *argv[])
{
Mat image = imread("/home/pi/Head.jpg");
namedWindow("My Image", 1);
imshow("My Image", image);
waitKey(0);
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
运行选择 Release 版本,点击运行,效果如下
至此,树莓派使用cmake 源码编译 OpenCV C++ 就完成了