基于树莓派4B的OpenCV安装与简单应用(真速通版)

news2024/10/7 2:23:50

前言:本文为手把手教学树莓派4B的OpenCV安装与简单应用(真速通版本),树莓派4B最为目前最新款的树莓派家族一员深受创客和开发者喜爱。树莓派4B作为一款搭载 Cortex-A72 系列芯片的板载电脑,其不仅可以作为简单的 MCU 进行控制方面开发,更可以凭借其高计算性能进行深度学习的图像处理。说到深度学习图像处理自然离开不了 OpenCV 这个工具。作者将用本篇博客帮助大家真正实现速通树莓派4B的OpenCV安装,并进行简单的应用教学。(镜像与附件安装包文见篇章末尾!

硬件实物图:

效果图:

一、树莓派4B概述

树莓派(Raspberry Pi)是一款基于ARM的微型电脑主板旨为学生编程教育而设计,其系统基于Linux,由注册于英国的慈善组织 “Raspberry Pi 基金会”开发,Eben.Upton为项目带头人。别看其外表“娇小” ,内“心”去很强大,上网、看视频、听音乐等功能都有,可谓是“麻雀虽小,五脏俱全”。自问世以来,受众多计算机发烧友和创客的追捧。

目前,市场上有多种型号Raspberry Pi,具体如下表 1 树莓派参数对比:

树莓派主流操作系统(OS):(1)、NOOBS;(2)、Raspbian;(3)、第三方系统;
适合树莓派的发行版版本很多,足以满足不同人群的需求。 官方推荐的有 NOOBS 和 Raspbian, Raspbian(单纯的 Arm 版的 Linux 系统,基于 Debian) 是当前实用最广泛的操作系统。第三方 OS 都有其自身风格,如果需求只是某一方面的功能,那么选择第三方也是可以的。

树莓派官网镜像地址:Raspberry Pi OS – Raspberry Pi

补充说明:树莓派官网下载的镜像建议为带桌面版本的,这样方便后续VNC查看桌面进行设置。如果想走OpenCV速通版本,建议使用作者博客篇末的镜像资源!

二、OpenCV

2.1 OpenCV概述

OpenCV Intel® 开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API 。它不依赖于其它的外部库——尽管也可以使用某些外部库。OpenCV 对非商业应用和商业应用都是免费(FREE)的。

它有以下特点:
(1) 开放的C/C++源码
(2) 基于Intel处理器指令集开发的优化代码
(3) 统一的结构和功能定义
(4) 强大的图像和矩阵运算能力
(5) 方便灵活的用户接口
(6) 同时支持MS-WINDOWS、LINUX平台

作为一个基本的计算机视觉、图像处理和模式识别的开源项目,OpenCV 可以直接应用于很多领域,作为第二次开发的理想工具。特别是新版的 OpenCV 中提供了大量的 Python 接口,极大的简化了 OpenCV 函数的调用,使得使用者可以更为方便的利用 OpenCV 实现各种功能。

opencv官网:OpenCV - Open Computer Vision Library

2.2 OpenCV安装

作者说明:树莓派4B安装OpenCV极其需要版本对应,比如python版本与OpenCV包的对应,依赖库的对应,numpy的对应等。如果,读者朋友初次尝安装OpenCV建议直接使用作者的镜像和依赖包!

作者默认读者朋友不管是通过屏幕还是VNC等操作成功连接树莓派终端,如果这步没有实现的话,建议去搜索一下教程。

作者通过SSH协议和MobaXterm软件实现连接树莓派4B终端:

VNC远程挂载树莓派桌面(作者手机热点卡,所以还是接屏幕了):

1、安装好树莓派官方镜像:raspios,查看python3和python版本;

作者提供的镜像python3的版本是python3.7.3(老旧的稳定版本),强烈建议别用python3.9版本的镜像,配套的opencv库依赖会出现一堆问题(全都是版本过高或者彼此不兼容)

2、下载 opencv-python 和 opencv-contrib-python 库;

opencv-python地址:piwheels - opencv-python

opencv-contrib-python地址:piwheels - opencv-contrib-python

直接使用指令下载这两个库文件巨慢而且很容易失败,所以作者建议在PC端下载好whl包之后通过XobaXterm软件传输给树莓派4B,然后通过指令直接进行安装。

选择的whl包也需要和自己镜像系统的python版本对应,cp37对应python3.7版本,cp39则对应python3.9版本,armv7l则是通过指令:uname -a进行查询!

作者的速通版本是直接使用作者提供好的whl和镜像直接安装,具体如下:

将作者提供的whl包直接全选后拉中导入树莓派4B的Download中:

作者提供的whl包和镜像是完美对应的,所以安装起来会畅通无阻,不会报错。

使用如下代码进行安装whl包:

#首先cd到Download文件夹吓
cd Download
#分别使用如下2指令安装whl包
pip3 install opencv-py(按Tab键自动补全)
pip3 install opencv-con(按Tab键自动补全)

之后分别使用如下指令进行安装依赖的numpy和 

sudo apt-get install python3-h5py
pip3 install numpy (按Tab键自动补全)

opencv依赖的其他库安装:

sudo apt-get install libhdf5-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libjasper-dev
sudo apt-get install libqt4-test
sudo apt-get install libqtgui4
sudo apt-get update

安装上述步骤走完基本就已经成功安装OpenCV了,搭配作者的镜像和whl包基本不好出任何问题,接下来我们试试启动OpenCV! 

python3
import cv2 # 检查导入成功

三、OpenCV的简单应用

3.1 树莓派4B摄像头使能

部分树莓派4B的镜像默认是不使能摄像头Camera的,所以,OpenCV调用摄像头可能会出现警告进而失败。所以,这里我们需要先使能Camera。

打开树莓派4B的终端(Crtl+Alt+t)之后输入一下打开配置指令:

sudo raspi-config

按照以下步骤找到摄像头选项,打开树莓派的摄像头功能。

打开后使用reboot命令重启树莓派,至此摄像头已经能够在树莓派上使用啦。

3.2 OpenCV应用

OpenCV就是基于图像处理的,这里我们利用OpenCV实现摄像头Camera进行拍照保存!

打开树莓派4B的 Thonny Python IDE 软件: 

Python代码:

import cv2
import numpy as np

cap = cv2.VideoCapture(0)
while(1):
 # get a frame
 ret, frame = cap.read()
 # show a frame
 cv2.imshow("capture", frame)

 if cv2.waitKey(1) & 0xFF == ord('q'):
 #退出并拍照
  cv2.imwrite("takephoto2.jpg", frame)
  print("take Photo Ok")
  break
cap.release()
cv2.destroyAllWindows()

上述代码,通过OpenCV打开摄像头Camera,之后将图像显示在窗口上,按“q”退出程序,并拍照保存!

四、项目效果

4.1 代码视频

树莓派4B的OpenCV简单应用

4.2 作者有话

本篇博客为作者树莓派专栏第一篇博客,帮助大家速通安装 OpenCV。后续作者将会利用树莓派4B作为载体帮助大家进行深度学习的实战!部署如:YOLOv5YOLOv5-Lite等目标检测网络。同时也会将深度学习与嵌入式控制结合起来,帮助大家成功快速入门嵌入式AI!(后续也会有Jeston Nano开发板的坏境搭配教学,感兴趣的可以关注一波!

五、项目代码

代码地址:基于树莓派4B的OpenCV安装速通版本的资源包资源-CSDN文库

如果积分不够的朋友,点波关注评论区留下邮箱,作者无偿提供源码和后续问题解答。求求啦关注一波吧 !!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第三方库介绍——Protobuf库(更高效的协议)

文章目录 protobuf综述传输协议与指令创建协议编译协议介绍addressbook.pb.h文件序列化与反序列化的接口 利用soctet实现客户端与服务端传输协议Linux(Ubuntu)安装protoc步骤编写案例代码Cartoon.prototcpsocket.hMyTcpsocket.hclient.cppserver.cppCMak…

01.4进程原理和系统调用--->经典的CFS调度器

进程的一些正常状态 什么是进程 操作系统作为硬件的使用层,提供使用硬件资源的能力,进程作为操作系统使用层, 提供使用操作系统抽象出的资源层的能力。 进程:是指计算机中已运行的程序。进程本身不是基本的运行单位,…

【微服务】springboot 通用限流方案设计与实现

目录 一、背景 二、限流概述 2.1 dubbo 服务治理模式 2.1.1 dubbo框架级限流 2.1.2 线程池设置 2.1.3 集成第三方组件 2.2 springcloud 服务治理模式 2.2.1 hystrix 2.2.2 sentinel 2.3 网关层限流 三、常用限流策略 3.1 限流常用的算法 3.1.1 令牌桶算法 3.1.2 …

2023最新Java面试八股文汇总(五十万字总结版)

写在前面 今年的疫情,让招聘面试变得雪上加霜。已经有不少大厂,如腾讯、字节跳动的招聘名额明显减少,面试门槛却一再拔高,如果不用心准备,很可能就被面试官怼得哑口无言,甚至失去了难得的机会。 现如今&a…

<Linux开发>驱动开发 -之- Linux RTC 驱动

<Linux开发>驱动开发 -之- Linux RTC 驱动 交叉编译环境搭建: <Linux开发> linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下: <Linux开发> -之-系统移植 uboot移植过程详细…

Dubbo【 Dubbo概念(什么是分布式系统、什么是RPC、核心组件、Zookeeper注册中心 )】(一)-全面详解(学习总结---从入门到深化)

目录 Dubbo概念_什么是分布式系统 什么是分布式 Dubbo概念_什么是RPC Dubbo概念_简介 Dubbo概念_核心组件 Dubbo配置开发环境_Zookeeper注册中心 Dubbo配置开发环境_管理控制台 Dubbo入门案例_需求介绍 Dubbo入门案例_配置开发环境 Dubbo入门案例_服务生产者配置…

VLC-QT源码编译(Windows10+VS2020+MSVC20019+QT5.15)

参考VLC-Qt的编译与使用 windows10VS2019qt5.15 下载源码 VLC-QT https://github.com/vlc-qt/vlc-qt可以通过git或者直接下载ZIP文件,但是里面的libvlc-header和packaging没有下载下来,需要再自行下载。 VLC https://download.videolan.org/vlc/las…

行为型模式--备忘录模式

目录 概述 结构 案例实现 “白箱”备忘录模式 总结: “黑箱”备忘录模式 优缺点 优点: 缺点: 使用场景 概述 又叫快照模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这…

zeromq的学习笔记

ctx_t 在创建ctx_t时,会设置以下参数 _io_thread_count io线程数默认是1 _max_sockets最大socket数是1023 _starting标识设置为true,此时socket还没有创建 _terminating设置为false,在调用zmq_ctx_term时该标识会设置为true _tag设置为ZMQ_CTX_TAG_VALUE_GOOD&…

mySql和VSC++

确认主机服务里的mysql服务已打开 使用组合键“winR”运行“services.msc”,进入本地服务窗口; 2.进入本地服务窗口后,在右侧服务列表中,查找到“ mysql ”服务选项; 3.查找到mysql服务选项后,双击打开mysq…

C++ 面向对象(3)——重载运算符和重载函数

C 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个重…

FDM3D打印系列——3、常用打印材料介绍

大家好,我是阿赵。 FDM3D打印机一般都可以支持多种打印材料的,下面来介绍一下几种常用的打印材料 一、PLA 使用FDM打印,最常见的材料就是PLA了 PLA(Polylactic acid),中文名为生物降解塑料聚乳酸&#…

网络安全面试题,渗透测试面试总结

1.什么是WebShell? WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的─种命令执行环境,也可以将其称做为─种网页后门。黑客在入侵了─个网站后,通常会将这些asp或php后门文件与网站服务器WEB目录下正常的网页文件混在─起,然后就可…

【Vue3】生命周期(钩子)函数

在 Vue 3 中,生命周期函数已经被重新设计为钩子函数,并且与 Vue 2 中的生命周期函数有所不同,可以在 setup 函数中使用 onXXX 形式的钩子函数来执行对应的操作。以下是选项式 API 和组合式 API 中常用的几个钩子函数对比: beforeC…

【Java】PriorityQueue--优先级队列

目录 一、优先级队列 (1)概念 二、优先级队列的模拟实现 (1)堆的概念 (2)堆的存储方式 (3)堆的创建 堆向下调整 (4)堆的插入与删除 堆的插入 堆的…

Kubernetes(k8s)容器编排组件介绍

目录 1 整体架构1.1 Master 架构1.2 Node 架构 2 k8s部署组件介绍2.1 K8s 集群架构图2.2 k8s控制组件2.2.1 控制平面2.2.2 kube-apiserver2.2.3 kube-scheduler2.2.4 kube-controller-manager2.2.5 etcd 2.3 k8s运行组件2.3.1 k8s节点2.3.2 容器集2.3.3 容器运行时引擎2.3.4 ku…

机试复试准备中--梦校真题

一、矩阵转置二、统计单词写法一:读取一整行写法二:依次读入每一个单词 三、二叉排序树(DFS)四、IP地址五、特殊排序六、ab(高精度加法)七、奇偶校验八、最大的两个数九、二叉树遍历(DFS)十、成绩排序十一、…

【C++学习】C++入门 | 引用 | 引用的底层原理 | auto关键字 | 范围for(语法糖)

写在前面: 上一篇文章我介绍了缺省参数和函数重载, 探究了C为什么能够支持函数重载而C语言不能, 这里是传送门,有兴趣可以去看看:http://t.csdn.cn/29ycJ 这篇我们继续来学习C的基础知识。 目录 写在前面&#x…

正交编码与正交沃尔什函数详解

本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 正交编码正交编码的…

Spring Boot 集成 WebSocket 实现服务端推送消息到客户端

假设有这样一个场景:服务端的资源经常在更新,客户端需要尽量及时地了解到这些更新发生后展示给用户,如果是 HTTP 1.1,通常会开启 ajax 请求询问服务端是否有更新,通过定时器反复轮询服务端响应的资源是否有更新。 在长…