2023-简单点-树莓派-camera module 3介绍

news2024/11/17 17:44:01

Raspberry Pi Camera Module 3

  • 介绍
  • 开头先说,注意事项
  • libcamera
  • 感光芯片和驱动的兼容图
  • 额外:不同module的对应的参数图
  • 用bullseye系统测试摄像头
    • 预览窗口
    • 拍摄静态图片
    • bayer raw图像获取
    • 超长曝光
    • 视频流
    • raw视频流
  • ref

介绍

树莓派镜像在Bullseye版本之后,底层的树莓派驱动由Raspicam切换成libcamera。libcamera是一个开源的软件栈(后面会称为驱动,方便理解),方便于第三方移植和开发自己的摄像头驱动。截止到20230207,官方已经针对libcamera提供了pycamera2库,方便用户使用Python程序调用。
在这里插入图片描述

开头先说,注意事项

  1. 该摄像头不支持buster系统,我一般用bullseye系统

  2. Camera module 3,会开启自动对焦功能

libcamera

在libcamera内核的下面,树莓派提供了一个定制的pipe handler,libcamera使用这个layer来驱动树莓派本身的传感器和ISP(图像信号处理器)。

ISP包含了很多算法,是个算法集合,例如IPAs(图像处理算法),如AEC/AGC(自动曝光/增益控制),AWB(自动白平衡),ALSC(自动镜头阴影校正)等。

感光芯片和驱动的兼容图

在这里插入图片描述

额外:不同module的对应的参数图

在这里插入图片描述

用bullseye系统测试摄像头

如果使用的是最新的Raspberry Pi Camera Module 3 或者Raspberry Pi Global Shutter Camera,需要运行以下指令进行系统更新(需要联网操作).注意,只支持最新的bullseye系统

sudo apt-get update -y
sudo apt-get upgrade -y

如果使用的是OV9281, IMX290, IMX378, 或者非树莓派官方的IMX219IMX477 摄像头需要另外配置config.txt 文件

sudo nano /boot/config.txt

改为如下:

camera_auto_detect=0

预览窗口

开始preview,以下是一直开着preview窗口

sudo libcamera-hello -t 0

拍摄静态图片

拍摄一张全像素的JPEG图像

libcamera-jpeg -o test.jpg

拍摄一张全像素的JPEG图像,保存为test.jpg
用户可以通过-t 参数来设置预览时间,同时可以通过–width 和 --height来设置拍摄图像的分辨率。例如:

libcamera-jpeg -o test.jpg  --width 640 --height 480

所有的libcamera指令都允许用户自己设置快门时间和增益:
拍摄一张图像,拍摄中会曝光20ms并且摄像头增益被设置为1.5倍。

libcamera-jpeg -o test.jpg  --width 640 --height 480 --shutter 20000 --gain 1.5

设置的增益参数,会首先设置感光芯片内部的模拟增益参数,如果设置的增益超过了驱动内置的最大的模拟增益的数值,会先设置芯片的最大模拟增益,然后将剩下的增益倍数作为数字增益来生效

数字增益是通过ISP(图像信号处理)来实现的,并非是直接调整芯片内置寄存器。正常情况下,默认的数字增益趋近于1.0,除非是有有以下三种情况。

  • 整体的增益参数需求,也就是当模拟增益无法满足设定的增益参数需求的时候,会需要数字增益来做补偿
  • 其中一个颜色增益小于1 (颜色增益是通过数字增益来实现的),在这种情况下, 最后获得增益就是稳定为 1/min(red_gain, blue_gain), 也就是实际是上应用了统一的数字增益, 且是其中一个颜色通道的增益值(非绿色通道)。
  • AEC/AGC被修改了。如果AEC/AGC有变化的时候, 数值增益也会一定程度上会发生变化,从何来来消除任何波动,但是这种变化会被快速恢复到"正常"值.

bayer raw图像获取

原始图像(Raw image)图像就是直接图像传感器输出的图像, 没有经过任何ISP或者CPU处理。对于彩色相机传感器,一般来说原始图像的输出格式是Bayer. 注意原始图和我们之前说的位编码的RGB和YUV图像不同,RGB和YUV也是经过ISP处理后的图像的。
拍摄一张原始图像的指令:

libcamera-still -r -o test.jpg

原始图像一般是以DNG (Adobe digital Negative) 格式保存的,DNG格式可以兼容大部分标准程序, 比如dcraw 或者RawTherapee. 原始图像会被保存为.dng后缀的相同名字的文件,比如如果运行上面的指令,为被另存为test.dng并同时生成一张jpeg文件

DNG文件中包含了已图像获取有关的元数据, 比如白平衡数据,ISP颜色矩阵等, 下面是用exiftool工具显示的元数据编码信息:

File Name                       : test.dng
Directory                       : .
File Size                       : 24 MB
File Modification Date/Time     : 2021:08:17 16:36:18+01:00
File Access Date/Time           : 2021:08:17 16:36:18+01:00
File Inode Change Date/Time     : 2021:08:17 16:36:18+01:00
File Permissions                : rw-r--r--
File Type                       : DNG
File Type Extension             : dng
MIME Type                       : image/x-adobe-dng
Exif Byte Order                 : Little-endian (Intel, II)
Make                            : Raspberry Pi
Camera Model Name               : /base/soc/i2c0mux/i2c@1/imx477@1a
Orientation                     : Horizontal (normal)
Software                        : libcamera-still
Subfile Type                    : Full-resolution Image
Image Width                     : 4056
Image Height                    : 3040
Bits Per Sample                 : 16
Compression                     : Uncompressed
Photometric Interpretation      : Color Filter Array
Samples Per Pixel               : 1
Planar Configuration            : Chunky
CFA Repeat Pattern Dim          : 2 2
CFA Pattern 2                   : 2 1 1 0
Black Level Repeat Dim          : 2 2
Black Level                     : 256 256 256 256
White Level                     : 4095
DNG Version                     : 1.1.0.0
DNG Backward Version            : 1.0.0.0
Unique Camera Model             : /base/soc/i2c0mux/i2c@1/imx477@1a
Color Matrix 1                  : 0.8545269369 -0.2382823821 -0.09044229197 -0.1890484985 1.063961506 0.1062747385 -0.01334283455 0.1440163847 0.2593136724
As Shot Neutral                 : 0.4754476844 1 0.413686484
Calibration Illuminant 1        : D65
Strip Offsets                   : 0
Strip Byte Counts               : 0
Exposure Time                   : 1/20
ISO                             : 400
CFA Pattern                     : [Blue,Green][Green,Red]
Image Size                      : 4056x3040
Megapixels                      : 12.3
Shutter Speed                   : 1/20

超长曝光

  1. 首先需要禁用AEC/AGC和白平衡: 算法会导致图片在收敛的时候多等待很多帧数据
  2. 禁用这些算法需要另设置显式值,另外, 用户可以通过**–immediate设置来跳过预览过程**。
libcamera-still -o long_exposure.jpg --shutter 100000000 --gain 1 --awbgains 1,1 --immediate

视频流

libcamera-vid -t 10000 -o test.h264

raw视频流

libcamera-raw类似于视频录制程序,不同的地方时,libcamera-raw录制的是直接传感器输出的Bayer格式的数据,也就是原始图像数据。libcamera-raw不会显示预览窗口。
通常因为raw太大,进行分割存储

libcamera-raw -t 2000 --segment 1 -o test%05d.raw

ref

官网
微雪

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

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

相关文章

【每日一题】1657. 确定两个字符串是否接近-2023.11.30

题目: 1657. 确定两个字符串是否接近 如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 : 操作 1:交换任意两个 现有 字符。 例如,abcde -> aecdb操作 2:将一个 现有 字符的…

系统频繁崩溃,如何考虑系统的稳定性和可扩展性?

最近网传互联网应用信息系统频繁崩溃,语雀崩完淘宝崩,淘宝崩完滴滴崩,随着业务的发展和技术的进步,对于信息系统的要求也越来越高。信息应用系统为了满足不断增长的用户和业务需求,提高系统的稳定性和扩展性至关重要。…

华为云cce容器管理中的调度策略作用

研究不深,但是这个还是挺重要的,在这里记录一下。 在cce节点集群中,有时候会发现有的节点实例过于饱满,有的又有些空,导致部分节点由于压力过大,存在崩溃的危险,这时候调度策略就有用了。 我这…

new Date()国际化时间参数处理的存在偏差问题

[TOC](new Date()国际化时间参数处理的存在偏差问题) 实际存在场景:各国使用new Date进行处理时间到各国时区时处理后的日期与实际当地日期不符合,会存在以下场景如图: 统计日期和表头计算的日期不符合 点击某一天跳转到详情时间参数不正确 …

基于谷歌Flutter的媒体资讯APP的设计与实现

基于谷歌Flutter框架媒体资讯App的设计与实现 摘要: 当今社会,随着经济和科技的发展,人们的生活节奏也愈来愈快,人们生活的阅读时间也越来越少,越发的流行碎片化阅读,而同样的对于互联网的客户端开发者&am…

2.Ansible的copy模块,我最常用的模块

1. 简述 先从我自身的情况来说,我不是运维人员,并且对linux操作也不是特别熟悉,所以工作中我使用ansible基本就是在平常的自动化部署中,而使用最多的模块就是copy模块。我使用copy模块也主要是来替换生产环境的配置文件。所以&am…

数据结构树与二叉树(5)Huffman树

#include <iostream> #include <stack> #include <queue>using namespace std;struct Node {char name ;int code[200];int num 0;//code的下标int weight 0;//权重&#xff08;次数&#xff09;Node* lchild;//左孩子Node* rchild;//右孩子Node* parent;N…

获取Spring容器Bean工具类

获取Spring容器Bean工具类 1、创建SpringUtils工具类2、注册 SpringUtils工具类3、如果打包的是War方式&#xff0c;可能上面两个注册工具类的方法都没用 1、创建SpringUtils工具类 public class SpringUtils implements ApplicationContextAware {private static Application…

基于卷积神经网络的人体行为识别系统开发与设计

摘 要 基于卷积神经网络的人体行为识别的开发与设计 摘要&#xff1a;随着计算机领域不断的创新、其它行业对计算机的应用需求的提高以及社会对解放劳动力的迫切&#xff0c;人机交互成为人们关注的问题。深度学习的出现帮助了人们实现人机交互&#xff0c;而卷积神经网络是其…

Codeforces Round 907 (Div. 2) (C 贪心 D套路? F dfs序+差分树状数组)

A&#xff1a; 这种操作题&#xff0c;每次先想这个操作有什么性质 对于2^0来说可以操作 第1位 对于2^1来说可以操作 第1-2位 对于2^2来说可以操作 第1-4位 &#xff08;第3位无法单独修改&#xff09; 对于2^3来说可以操作 第1-8位&#xff08;第5 6 7位无法单独修改&…

SAP ABAP ALV Tree 的使用

在 SAP 业务系统中&#xff0c;大量地使用到了ALV Tree 对象&#xff0c;该对象在表格基础上对同类数据 进行归类&#xff0c;并对各分类能进行数据汇总&#xff0c;如图8-10 所示。 以航班表&#xff08;SPFLI&#xff09;为例&#xff1a; &#xff08;1&#xff09;按国家…

面试题:Docker 有几种网络模式?很多5 年工作经验都答不上来。。

文章目录 docker容器网络docker的4种网络模式bridge模式container模式host模式none模式 docker容器网络配置Linux内核实现名称空间的创建ip netns命令 创建Network Namespace操作Network Namespace转移设备veth pair创建veth pair实现Network Namespace间通信 四种网络模式配置…

springboot启动开启热部署

springboot启动开启热部署 手动方式 或者点idea上面的build->build project 自动方式 勾上Build project automatically 然后ctrl alt shift / 选择Registr 勾上就好了 新版idea可以在这里选 热部署范围设置 这是spring-boot-devtools起的作用&#xff0c;所以还…

Rest模式和参数

展开运算符和Rest参数都是JavaScript中的语法特性&#xff0c;用于处理函数的参数。它们在使用方式和功能上有一些区别。 展开运算符用于将可迭代对象展开为独立的值&#xff0c;而Rest参数用于将多个参数收集到一个数组中。展开运算符可以用于多种上下文&#xff0c;而Rest参数…

代码浅析DLIO(三)---子图构建

0. 简介 我们刚刚了解过DLIO的整个流程&#xff0c;我们发现相比于Point-LIO而言&#xff0c;这个方法更适合我们去学习理解&#xff0c;同时官方给出的结果来看DLIO的结果明显好于现在的主流方法&#xff0c;当然指的一提的是&#xff0c;这个DLIO是必须需要六轴IMU的&#x…

three.js球体实现

作者&#xff1a;baekpcyyy&#x1f41f; 使用three.js渲染出可以调节大小的立方体 1.搭建开发环境 1.首先新建文件夹用vsc打开项目终端 2.执行npm init -y 创建配置文件夹 3.执行npm i three0.152 安装three.js依赖 4.执行npm I vite -D 安装 Vite 作为开发依赖 5.根…

C#文件流二进制文件的读写

目录 一、BinaryWriter类 二、BinaryReader类 三、示例 1.源码 2.生成效果 二进制文件的写入与读取主要是通过BinaryWriter类和BinaryReader类来实现的。 一、BinaryWriter类 BinaryWriter类以二进制形式将基元类型写入流&#xff0c;并支持用特定的编码写入字符串&#…

Linux环境搭建(Ubuntu22.04)+ 配置共享文件夹(Samba)

Linux开发环境准备 搭建Linux开发环境所需要的软件如下&#xff1a; VMware虚拟机&#xff1a;用于运行Linux操作系统的虚拟机软件之一&#xff0c;VMware下载安装在文章中不做说明&#xff0c;可自行百度谢谢Ubuntu光盘镜像&#xff1a;用于源代码编译&#xff0c;有闲置计算…

C#开发的OpenRA游戏之属性SelectionDecorations(14)

C#开发的OpenRA游戏之属性SelectionDecorations(14) 前面分析选择类时,还有一个功能,就是把选中物品的状态和生命值显示出来。 它是通过下面的函数来实现: protected override IEnumerable<IRenderable> RenderSelectionBars(Actor self, WorldRenderer wr, bool …

【探索Linux】—— 强大的命令行工具 P.18(进程信号 —— 信号捕捉 | 信号处理 | sigaction() )

阅读导航 引言一、信号捕捉1. 内核实现信号捕捉过程2. sigaction() 函数&#xff08;1&#xff09;函数原型&#xff08;2&#xff09;参数说明&#xff08;3&#xff09;返回值&#xff08;4&#xff09;函数使用 二、可重入函数与不可重入函数1. 可重入函数条件2. 不可重入函…