小白一枚,刚买的树莓派3b+,大概断续花了4天时间从上手到搞定opencv,记录一下,以后少踩坑
本文主要参考以下文章:
原文链接: [https://www.cnblogs.com/gghy/p/11916830.html]

原文链接:[https://www.jianshu.com/p/56929416b4a1]

主要目录

  • 一. 配置树莓派环境
    • 1.下载、烧录官方系统
    • 2.编译前准备工作(重要)
      • case1 换源更新保证能下载(清华或者科大源)
      • case2 扩充树莓派空间和swap交换分区空间
  • 二. 安装OpenCV所需要依赖的工具和一些图像视频库
  • 三. 编译安装opencv
  • 四.测试

一. 配置树莓派环境

1.下载、烧录官方系统

  • 1.使用SDFormatter格式化SD卡
  • 2.使用win32diskimager烧录系统镜像
  • 3.创建ssh文件和wpa_supplicant.conf空白文件

烧录树莓派操作系统镜像

用文本编辑器打开wpa_supplicant.conf,输入以下配置,可以用多个network{}来配置多个wifi:

  • 好处:在没有外接显示器的情况下,开机会自动连接wifi,获取ip地址即可使用VNC工具远程登陆
配置wifi文件country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={ssid="microsoft"psk="12345678"priority=1
}
network={ssid="将我替换成WiFi名字,不删除引号,不能有中文"psk="将我替换成WiFi密码,不删除引号"priority=将我替换成数字,数字越大代表优先级越高
}

将ssh空白文件和wpa_supplicant.conf文件放入boot目录盘中

ssh空白文件是为了开启raspberry系统默认关闭ssh权限,这个方式可以开启之

  • 获取树莓派ip地址的方法:
  1. 如果树莓派连接到了显示屏上,可以直接鼠标指向右上角网络图标,ip地址会自动显示
  2. 如果树莓派连接到了显示屏上,可以打开树莓派命令行窗口,输入ifconfig
  3. 如果没有显示屏,用手机连到与树莓派同一个网络的wifi下,打开dataplicity应用上扫描出树莓派的ip地址
  4. 如果没有显示屏,用电脑连到与树莓派同一个网络的wif或者有线网络下,打开局域网ip扫描器,扫描出树莓派ip地址

2.编译前准备工作(重要)

case1 换源更新保证能下载(清华或者科大源)

1、打开sources.list和raspi.list文件进行修改

sudo nano /etc/apt/sources.list
sudo nano /etc/apt/sources.list.d/raspi.list

2、用 # 注释掉或删掉原文件内容,用以下内容取代(Ctrl + O 保存再 Ctrl + X 退出)

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/buster main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi

3、用 # 注释掉或删掉原文件内容,用以下内容取代(Ctrl + O 保存再 Ctrl + X 退出)

deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

如果是远程登陆方式使用putty命令行方式更方便
将 /etc/apt/sources.list 文件中默认的源地址 http://raspbian.raspberrypi.org/ 替换为 http://mirrors.ustc.edu.cn/raspbian/ 即可。

raspbian 2018-04-19 之后的镜像默认源已经更改,用如下命令替换:
树莓派的 raspberrypi.org 软件源,也即 /etc/apt/sources.list

sudo sed -i 's|raspbian.raspberrypi.org|mirrors.ustc.edu.cn/raspbian|g' /etc/apt/sources.list

树莓派的 archive.raspberrypi.org 软件源,也即 /etc/apt/sources.list.d/raspi.list

sudo sed -i 's|//archive.raspberrypi.org|//mirrors.ustc.edu.cn/archive.raspberrypi.org|g' /etc/apt/sources.list.d/raspi.list

当然也可以直接编辑 /etc/apt/sources.list 文件(需要使用 sudo)。删除原文件所有内容,用以下内容取代(以 Buster 示例):

deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi

编辑此文件后,请使用 sudo apt-get update 命令,更新软件索引。

case2 扩充树莓派空间和swap交换分区空间

  • 扩充树莓派空间

1、执行下面指令打开配置选项,选择 7 Advanced Options

sudo raspi-config


2、再选择第一项 A1 Expand Filesysem

3、选择确定,之后选择 finish,再重启

  • 扩充swap交换分区空间
    在开始编译之前,建议你增加交换空间。这将使你使用树莓派的所有四个内核来编译OpenCV,而不会由于内存耗尽导致编译挂起。

打开 / etc / dphys - swapfile 文件:

 sudo nano /etc/dphys-swapfile

然后编辑 CONF_SWAPSIZE 变量:

注意:此处我将交换空间从100MB增加到2048MB;如果你不执行此步骤,你的树莓派编译时很可能挂起。
重新启动交换服务:

sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

free -m查看是否成功

二. 安装OpenCV所需要依赖的工具和一些图像视频库

#安装OpenCV相关工具,build-essential、cmake、git和pkg-config
sudo apt-get install build-essential git cmake pkg-config -y   #安装jpeg格式图像工具包
sudo apt-get install libjpeg8-dev -y    #安装tif格式图像工具包
sudo apt-get install libtiff5-dev -y #安装JPEG-2000图像工具包
sudo apt-get install libjasper-dev -y#安装png图像工具包
sudo apt-get install libpng12-dev -y#安装视频I/O包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y#安装gtk2.0
sudo apt-get install libgtk2.0-dev -y#安装OpenCV数值优化函数包
sudo apt-get install libatlas-base-dev gfortran -y
  • 下载opencv3.4.3和opencv_contrib3.4.3
// 下载OpenCV
wget -O opencv-3.4.3.zip https://github.com/Itseez/opencv/archive/3.4.3.zip// 下载OpenCV_contrib库:
wget -O opencv_contrib-3.4.3.zip https://github.com/Itseez/opencv_contrib/archive/3.4.3.zip// 解压OpenCV
unzip opencv-3.4.3.zip// 解压OpenCV_contrib库:
unzip opencv_contrib-3.4.3.zip

ps:如果在线方式无法下载,可以电脑下载完成后用filezella上传到树莓派相应目录
参考文章:

三. 编译安装opencv

  • 配置CMake编译OpenCV 3环境
    使用CMake设置编译,然后运行 make 来编译OpenCV。这是整个过程中耗时最长的步骤,大约4个小时。

回到OpenCV存储库并创建 build 文件夹,用来存放 CMake 编译时产生的临时文件。

复制代码

1 //具体路径请以实际为准
2 cd ~/opencv-3.4.3
3
4 // 新建build文件夹
5 mkdir build
6
7 // 进入build文件夹
8 cd build

设置CMake编译参数,安装目录默认为/usr/local
方式一. 使用cmake 工具命令行配置编译参数
注意参数名、等号和参数值之间不能有空格,每行末尾“\”之前有空格,这里使用换行符“\”是为了看起来工整,参数值最后是两个英文的点,意思是上级

目录(【注意】如果在root用户下执行cmake命令,请将OPENCV_EXTRA_MODULES_PATH的值改为绝对路径,如:/home/pi/opencv_contrib-3.4.3/modules):

/** CMAKE_BUILD_TYPE是编译方式1. CMAKE_INSTALL_PREFIX是安装目录2. OPENCV_EXTRA_MODULES_PATH是加载额外模块3. INSTALL_PYTHON_EXAMPLES是安装官方python例程4. BUILD_EXAMPLES是编译例程(这两个可以不加,不加编译稍微快一点点,想要C语言的例程的话,在最后一行前加参数INSTALL_C_EXAMPLES=ON,要C++例程的话在最后一行前加参数INSTALL_C_EXAMPLES=ONINSTALL_CXX_EXAMPLES=ON)
**/sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \-D CMAKE_INSTALL_PREFIX=/usr/local \-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.3/modules \-D INSTALL_PYTHON_EXAMPLES=ON \-D INSTALL_CXX_EXAMPLES=ON \-D BUILD_EXAMPLES=ON ..

方式二. 使用cmake-gui可视化工具
为了安装方便不容易出错,建议使用cmake-gui安装,安装命令如下:

sudo apt-get install cmake-gui

安装完毕打开cmake-gui

cmake-gui

在Where is the source code:选择opencv-4.1.0目录位置(我的位置为/home/pi/install_bag/opencv-4.1.0),在Where to build the binaries:选择build位置(我的位置为/home/pi/install_bag/opencv-4.1.0/build)。如下图所示:

找到BUILD_opencv_world,后面的方框点上勾; (这个选不选问题不大)

找到在CMAKE_BUILD_TYPE 值处输入RELEASE,其他保持不变;

找到OPENCV_ENABLE_NONFREE,在后面的方框点上勾(有的算法有专利,不点这个不能用,比如sift);

找到OPENCV_EXTRA_MODULES_PATH,选择opencv_contrib文件夹中的modules文件夹,注意是modules文件夹(我的路径是/home/pi/opencv/opencv_contrib/modules)。

完成以上工作再点击Configure,耐心等一等,如果上面还有红色的再点击Configure,之到没有红色为止。Configure完成之后点击Generate,等一等即可
此处最好翻墙出去,然后在点击Configure,会自动下载一些文件,没有梯子很可能下载不下来,会导致后面编译过程报错

我的第一次编译就有如下报错,虽然第二遍Configure已经全白,但是第一遍报红的文件并没有下载下来

/home/opencv/opencv_contrib-3.4.3/modules/xfeatures2d/src/boostdesc.cpp:653:20: fatal error: boostdesc_bgm.i: 没有那个文件或目录#include "boostdesc_bgm.i"^~~~~~~~~~~~~~~~~

建议大家编译之前到目录下/home/opencv/opencv_contrib-3.4.3/modules/xfeatures2d/src 文件夹里查看是否有如下11个文件。

如果没有务必拷贝到/home/opencv/opencv_contrib-3.4.3/modules/xfeatures2d/src 文件夹里。我在安装时还有一个文件face_landmark_model.dat没有下载成功,将该文件放到build目录下的/share/opencv4/testdata/cv/face目录下,如果没有目录可自行建立。

检查拷贝完毕,最好再次Configure一下,直到没有上面没有红色为止,然后再点击Generate。如果不放心可以再次检查日志。

  • 编译OpenCV 3
1 /**
2 * 以管理员身份,否则容易出错
3 * make命令参数-j4指允许make使用最多4个线程进行编译,这样编译速度会更快
4 * 可以根据自己机器的情况进行更改
5 * 使用tee命令可以将编译过程中终端显示的信息保存到make.log文件中,便于查看,这样即使VNC断线,终端的* 信息太多看不到,也可以通过make.log文件查看编译过程。
6 **/
7  sudo make
8 sudo make -j4 2>&1 | tee make.log #多线程如果死机请用上面指令

大概需要4h,编译到100%则成功

1 // 安装
2 sudo make install
3
4 // 更新动态链接库
5 sudo ldconfig

四.测试

python
import cv2
cv2.__version__


注意:
不要忘记回到 /etc/dphys-swapfile 文件:

1.将 CONF_SWAPSIZE 重置为 100MB

2.重新启动交换服务

——————————————
参考文章
原文链接:https://blog.csdn.net/qq_22863619/article/details/92568423
原文链接:https://blog.csdn.net/one_l_star/article/details/96561292
原文链接:https://www.jianshu.com/p/56929416b4a1

树莓派3B+编译OpenCV3.4.3详细步骤相关推荐

  1. mysql5.5在windows7下编译的详细步骤_Windows7下编译MySQL5.5的详细步骤

    由于在window7下编译MySQL5.5.19过程中遇到很多问题,所以再次把详细步骤写出来,以供大家参阅,这个是完整通过实验的步骤,网上一堆的东西不是少这个就是少那个,所以整理了下,希望帮助大家更好 ...

  2. 树莓派3B+ 编译Qt源码

    最近想在树莓派上安装个Qt的环境,正好手头上有之前玩过的树莓派3B+(4B去年加价卖给矿老板了),所以就把之前用来做游戏机的树莓派3B+来搭建环境了. 首先当然是刷系统,我选择的刷系统的方式是去官方下 ...

  3. 树莓派3B+、opencv3+PyQt5实现人脸识别门禁系统

    前言 总结.干货.知识点.注意实现.无个人背景(别人不会关心,捂脸) 效果展示 没点效果,没兴趣往下看了吧(反正我是这样) 下面是两个界面:主页和人脸检测界面,主页可以密码锁.以及其他操作(自己按需) ...

  4. 为树莓派3B+编译 64位UEFI 固件

    树莓派(RaspBerry) 是基于Arm架构的单板机,凭借着低廉的价格,丰富的社区资源风靡全球. 在Iot 大行其道的今天,微软也在树莓派上面开发了windows iot 的操作系统.为支持Wind ...

  5. 怎么在linux编辑程序后编译,在linux里,c程序的编辑、编译、调试的详细步骤是什么?...

    程序编写 命令行下的有vi,emacs 有界面的kwrite等等 编译用gcc 调试用gdb 一个编译调试示例 ------ 源程序:tst.c 1 #include <stdio.h> ...

  6. 安装centos7步骤_Centos7下源码编译安装mysql5.7 详细步骤 小白也能安装

    .清理安装环境: # yum erase mariadb mariadb-server mariadb-libs mariadb-devel -y # userdel -r mysql # rm -r ...

  7. OpenHarmony3.0在树莓派3B上的烧录与通讯

    OpenHarmony3.0已于2021年9月30号正式发布,本篇文章详细给出OpenHarmony3.0在树莓派3B上的烧录与通讯步骤,对其中使用的指令进行详细解释,同时附有烧录与通讯过程中使用的各 ...

  8. 树莓派3B/4B从零开始编译安装并刷入OpenWrt,让空闲的树莓派变成路由器

    不知道是不是全国的大学都一样,在宿舍内用4G网络真的是卡的不得了.这我哪能接受啊?开学没过几天就京东下单了一个TP-Link的路由器,还好学校没啥限制,提供的网线可以直接插WAN口上用.但是没过几天, ...

  9. 树莓派3B摄像头的详细使用教程(拍照+录像+监控)

    树莓派4B摄像头的详细使用教程(拍照+录像+监控) 本篇博文将介绍树莓派摄像头是如何在树莓派开发板上从安装到使用的,博主过程中参考了许多帖子,现将整理的比较全面的过程分享出来,供大家参考使用. 排线连 ...

最新文章

  1. c++人脸特征保存到本地_尚邦小规模人脸识别布控系统
  2. android build获取ext,android – 如何在Gradle中获取当前构建类型
  3. 重量级锁的加锁的基本流程
  4. c语言修改elf文件crc32,ELF文件中调试信息的格式说明?
  5. 怎么增加android模拟器内存卡,增加android模拟器的内存大小
  6. 加载文件流_jvm类加载的过程
  7. 如何在代码中让按钮高亮_各种博客的代码高亮是如何实现的
  8. 单链表的读取、插入与删除
  9. 开个坑: gitk和git容易被滥用的 cherry-pick 功能
  10. 凸优化第八章几何问题 作业题
  11. jacob将word转换为html
  12. 计算机网络高级软件编程技术
  13. Git入门——tortoisegit使用问题:git不显示图标?
  14. 三个臭皮匠赛过诸葛亮!白话Blending和Bagging
  15. 监控系统存储服务器和磁盘阵列,监控怎样用磁盘阵列存储服务器
  16. Unity如何实现投影阴影效果
  17. python怎样把两个图画到一起_如何使用python或matlab将多个图像堆叠在一起?
  18. java设置地图,mapXtreme for java 设置地图中点
  19. 用Unity开发2D消除类游戏的素材资源精选
  20. 金蝶K3 SQL报表系列-供应商应付/预付账款明细表

热门文章

  1. 打造“5G+IoT”生态,共创产业繁荣沃土
  2. Python 告诉你,情人节该送什么礼物?
  3. 今日头条或推“多闪”对垒微信;快播王欣马桶 MT 被封;高通拒为 iPhone 提供芯片 | 极客头条...
  4. mysql数据库表无法显示_【MySQL8.0.18】IDEA 连接数据库无法显示数据表
  5. rabbitmq视频教程,面试官:
  6. day13【前台】搭建环境
  7. 作为日千万订单级别的业务,美团外卖的后端服务是怎么支撑的
  8. python源文件后缀_Python怎样获取文件扩展名
  9. mysql管理索引_Mysql管理表和索引
  10. mysql.proc_升级后直接更改mysql.proc表