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

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.mzph.cn/news/184585.shtml

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

相关文章

高效的将两个文件夹中多余的文件删除

高效的将两个文件夹中多余的文件删除 解决方案 之前使用的是这个方法,但是图像太多,需要删除的有70W张,得删10多天。。 将两个文件夹中重复的图象删除 解决方案 先将image图像复制一份,然后改名为txt import osdef change_file…

论文笔记:Confidential Assets

Confidential Assets 描述了一种称为“保密交易”的方案,该方案模糊了所有UTXO的金额,同时保持了不创建或销毁硬币的公共可验证性。进一步将此方案扩展到“保密资产”,一种单一的基于区块链的分类帐可以跟踪多种资产类型的方案。将保密交易扩…

Attention机制(笔记)

参考:2.3.2注意力机制-part1_哔哩哔哩_bilibili 什么是attention? 答:注意力放在事物最有辨识度的部分 attention计算机制: 为什么用这个公式可以得到attention? 补充说明(chatGPT给出的解释)&…

值得收藏的15 个好用的 iPad/iPhone 数据恢复工具

有时您需要从移动或平板设备恢复关键数据。 许多人已经开始在手机上存储重要文件,因为他们可以在旅途中或现在几乎在任何情况下轻松访问数据。 不言而喻; 您只需在手机上轻轻一按,即可轻松访问电子邮件、共享图片、编辑和共享文档、支付账单等。一般来…

【Openstack Train安装】七、glance安装

Glance是为虚拟机的创建提供镜像的服务,我们基于Openstack是构建基本的IaaS平台对外提供虚拟机,而虚拟机在创建时必须为选择需要安装的操作系统,Glance服务就是为该选择提供不同的操作系统镜像。Glance提供Restful API可以查询虚拟机镜像的me…

Flutter创建TabBar

使用TabBar和TabBarView来创建一个包含"首页"、"分类"和"我的"的TabBar。每个Tab对应一个Tab控件,TabBarView中的每个页面对应一个Widget。 1.Tab使用自定义图标和颜色 一般UI设计的图会带渐变色之类的,应该保持图片的原…

【实战教程】PHP如何轻松对接阿里云直播?

1. 配置阿里云直播的推流地址和播放地址 使用阿里云直播功能前,首先需要在阿里云控制台中创建直播应用,然后获取推流地址和播放地址。 推流地址一般格式为: rtmp://{Domain}/{AppName}/{StreamName}?auth_key{AuthKey}-{Timestamp}-{Rand…

什么是API? (应用程序编程接口)

我们经常听到 API 这个专业名称。那么什么是 API 呢? 定义 API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。目的是提供应用程序与开发人员基于某软…

【电路笔记】-分流器

分流器 文章目录 分流器1、概述2、通用/网络配置3、无功分流器3.1 电阻电容分流器3.2 电阻-电感分流器 4、总结 我们在之前关于分压器的文中已经看到,分压过程是通过在串联配置中关联相同的组件来实现的。 在本文中,我们将重点关注电流分频器执行的电流分…

四个方法,设置excel文件只读模式

由于excel文件经常用于数据文件,数据就需要特别保护,大家可能需要将文件设置为只读模式来保护数据不被修改,Excel文件想要设置为只读的方法有很多,今天分享四种方法给大家: 方法一:文件属性 右键点击文件…

浅谈交流电表在印度充电桩生产厂家的应用

一.背景: 近几年为应对温室气体的排放导致的全球变暖、气候变化等问题,各大国纷纷对焦推进电动汽车,从而减少传统燃油汽车带来的大量温室气体排放。而推进新能源汽车的各项举措之中,充电桩的基础建设,又是其中的重中之重&#xf…

开源播放器GSYVideoPlayer + ViewPager2 源码解析

开源播放器GSYVideoPlayer ViewPager2 源码解析 前言一、GSYVideoPlayer🔥🔥🔥是什么?二、源码解析1.ViewPager2Activity 总结 前言 本文介绍GSYVideoPlayer源码中关于ViewPager2 GSYVideoPlayer 实现的滑动播放列表的实现原理。…

VMD-Attention-LSTM 价格预测实战

VMD-Attention-LSTM时间序列价格预测实战 完整数据代码可直接运行_哔哩哔哩_bilibili 数据展示:数据有几万条 足够的 主要模型代码: import tensorflow as tfdef attention_3d_block(inputs,TIME_STEPS,SINGLE_ATTENTION_VECTOR):# inputs.shape = (batch_size, time_steps,…

区间合并笔记

文章目录 什么是区间合并怎么做区间合并AcWing 803. 区间合并思路解析my - CODEdalao の CODE 什么是区间合并 区间合并是指给定多个区间,让你将重合的区间合并为一个区间 怎么做区间合并 区间合并类问题大多三个办法: 按左端点排序按右端点排序按左右…

Apache Doris 整合 FLINK CDC 、Paimon 构建实时湖仓一体的联邦查询入门

1.概览 多源数据目录(Multi-Catalog)功能,旨在能够更方便对接外部数据目录,以增强Doris的数据湖分析和联邦数据查询能力。 在之前的 Doris 版本中,用户数据只有两个层级:Database 和 Table。当我们需要连…

一键删除方舟编译器缓存文件js、js.map插件ArkCompilerSupport

新手学习鸿蒙开发,发现DevEco Studio编译过种会生成js、js.map,在论坛上看了其它开发者也提了问题但无没解决,写了一个插件大家试下: https://plugins.jetbrains.com/plugin/23192-arkcompilersupport 源码:https://g…

深度学习——Loss汇总

深度学习——Loss汇总 一、IOU Loss二、L1 Loss 一、IOU Loss 公式: 参考资料: 目标检测回归损失函数——IOU、GIOU、DIOU、CIOU、EIOU 二、L1 Loss 公式: 参考资料: PyTorch中的损失函数–L1Loss /L2Loss/SmoothL1Loss

高并发架构设计方法:面对高并发,怎么对症下药?

Java全能学习面试指南:https://javaxiaobear.cn 我们知道,“高并发”是现在系统架构设计的核心关键词。一个架构师如果设计、开发的系统不支持高并发,那简直不好意思跟同行讨论。但事实上,在架构设计领域,高并发的历史…

【C++】程序题( STL标准模板库)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

【element-plus使用】el-select自定义样式、下拉框选项过长等问题解决

1、自定义样式 <template><el-select v-model"value" style"width: 150px"><el-option label"选项一" value"option1"></el-option><el-option label"选项二" value"option2"><…