树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV

树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第1张图片

一、系统安装

1.SD 卡格式化

准备一片树莓派3B+,一张16G SD卡,一个读卡器,一个显示器,三个工具软件(SDFormatter,FileZilla Pro,Win32DiskImager),自行百度下载,也可以评论留言索取
先将 SD 卡插上读卡器,使用 SDFormatter 格式化:

2.系统烧录

使用 Win32DiskImager 烧录系统:RPI 系统下载
我使用系统为:2018-03-13-raspbian-stretch.img
需要系统可以自行下载或者留言索取,常见版本年份系统我基本具有,注意烧录系统要兼容树莓派硬件,不然会出现上电彩屏
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第2张图片
系统烧录:打开 Win32DiskImager 选择想要烧录的系统,点击 write

烧录完成会出现如下“状况”, Win32DiskImager 显示 Successful
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第3张图片

3.连接屏幕上电

二、系统支持包安装与调整

1.设置WiFi

此系统的wifi需要设置 WiFi Country,否则显示 No APs found scanning…Raspberry Pi Configration 下可以直接设置比较方便,选择 Localisation 选择 Set WiFi Country 设置为 CN China,然后 Reboot,之后等待一会就能搜寻到WiFi,连接WiFi
PS:有的系统没有此项,如果开机能连接 WiFi 则跳过此步
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第4张图片
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第5张图片

2.设置键盘

设置键盘模式(需要设置美式键盘,默认为英式键盘):在 Set WiFi Country 页面有 Set Keyboard 并点击,选择 United States → English(US, alternative international)
PS:有的系统默认美式,鉴别方法看能否打出 # 号,英式为£符号

3.设置SSH传输

Raspberry Pi Configuration 下选择 Interfaces 选项卡,在 SSH 设置为 Enabled,方便使用 FileZilla Pro 传输文件

4.树莓派换镜像源

需要修改

/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

这样就具有修改权限,可使用如下命令打开文件
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第6张图片

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 退出一个文件,这两步加起来时间稍长,坐等

5.设置远程桌面

输入命令并选择输入Y即可

sudoapt-get install xrdp
Y

树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第7张图片
使用如下命令查看ip

ifconfig

树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第8张图片
也可以使用手机软件 fing,连接在同一 WiFi 就能扫描到树莓派 ip,安卓苹果都有,界面如下(PS:我拥有两台正在工作的树莓派,所以我有两个 ip)
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第9张图片
打开远程桌面,输入ip即可连接,连接后输入用户名与密码就可以登陆树莓派界面,这种界面通常比较卡,还是建议买个屏幕,双11,618,双12,年货节,又不太贵
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第10张图片
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第11张图片

6.设置中文输入法

输入如下

sudo apt-get install scim-pinyin

树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第12张图片
重启,就行了

命令行设置(可阅读项)

前面几步也可以使用命令行

sudo raspi-config

↑↓用来选择行项,←→用来选择底部两个按钮
选择 Localisation Options
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第13张图片
具有四项设置,选择需要设置项就行

Change Locale
Change Timezone
Change Keyboard
Layout Change Wi-Fi country

树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第14张图片
选择 Interfacing Options
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第15张图片
设置SSH
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第16张图片

三、Cmake 安装与编译

1.安装支持包

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

安装成功
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第17张图片
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编译,主要是易于可视化
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第18张图片
programming 下可以看见 cmake 程序,点击启动
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第19张图片

2.获取源码

获取 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

点击快速连接,确定,找到所在文件夹,上传即可,时间稍久,休息片刻
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第20张图片
传输完成,可以在你选中的树莓派文件目录发现 sources 文件夹,默认为 /home/pi 目录
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第21张图片

3.cmake编译

在你喜欢的地方创建一个文件夹 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

开始编译,时间极长,睡一觉吧

编译完成如下

4.cmake 安装

还是在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 下每个模块都具有这个文件
树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV_第22张图片
所以需要对 modules 文件夹所有文件赋予权限,输入示例为
sudo chmod 777 -R ./folder,folder为你的文件夹

sudo chmod 777 -R ./modules
sudo make

即可正常运行,编辑时间很长,睡一觉吧

四、Qt安装与配置

1.Qt安装

直接在Terminal下输入

sudo apt-get install qt5-default
sudo apt-get install qtcreator

每次提示安装输入 Y 就行,两次安装完成如下,在 Programming 下具有 Qt Creater 快捷方式,Qt4 系列是安装 OpenCV 依赖库时安装的,此时树莓派具有 Qt5 与 Qt4,下面我们将打开Qt Creator 设置相应变量与环境

2.Qt配置

打开 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,只需修改 CompilerDevice type,其余用不着修改(虽然你可以修改 Name 为一个 NB 的名字,但根本用不着)
Device type 选择为 Desktop
Compiler 点击 Manage 选择 C++ 下的 GCC

修改完成后如下,点击 OK

(PS:Compiler 也可以选择 C 下的 GCC,有一丝微妙的差别,C++ 是图片跟 MainWindow 窗口同时出来,C 是先出来图片,× 掉后再出来 MainWindow 窗口,手动滑稽*)*

五、创建Qt工程

1.创建一个示例工程

FIle → New File or Project → Choose(默认) → Next(设置Name:test,路径默认) → Next (Kits 默认 Desktop,如果你改了名字就用你改后那个名字,点击Manage[鼠标放在 Desktop 上才显示]) → Next → Next → Finish,界面完成如下

2.程序编写与运行

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++ 就完成了

你可能感兴趣的:(树莓派3B+(适合树莓派3B) Qt 使用 Cmake C++ OpenCV)