0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

树莓派摄像头模块静态图像捕捉模式和设置

jf_9aVl32Dp 来源:Arm软件开发者 2023-07-03 14:39 次阅读

作者:David Plowman 2023年6月26日

本次#MagPiMonday,我们为您带来树莓派摄像头模块静态图像捕捉模式和设置的深入指南。

高品质摄像头模块采用手动对焦;新的摄像头模块3具有可通过软件控制的自动对焦功能


在MagPi#129(https://magpi.raspberrypi.com/issues/129)中,我们介绍了libcamera-still,它允许我们捕捉静止图像。但它还有更多的选项来控制如何捕捉图像,以及文件格式和可用的图像编码器。我们将在本教程中介绍这些特性。现在,我们将继续假设您的键盘和显示器直接接入了您的树莓派。

以不同分辨率拍摄图像


默认情况下,libcamera-still 将以摄像头支持的最大可用分辨率拍摄图像。例如,对于HQ摄像头,这意味着图像大小为4056×3040像素。但是,使用--width和--height参数可以很容易地更改它。例如,如果您想拍摄1536×1024像素的图像,则应使用:

libcamera-still --width 1536 --height 1024 -o smaller.jpg

树莓派摄像头模块3提供自动对焦功能,使您能够聚焦图像的特定部分

图像编码器和文件格式


图像通常以某种方式进行编码(通常会进行压缩,使其不那么大),然后保存为磁盘上的标准文件格式。

JPEG文件


libcamera-still使用的默认文件格式仍然是JPEG,因为它具有非常广泛的支持,再加上有用的压缩级别。通常,JPEG文件的扩展名是.jpg,或者有时是.JPEG,正如我们已经看到的那样。


JPEG是一种有损压缩格式,这意味着加载JPEG文件的结果不再与您开始使用的图像相同,尽管差异被安排为您最不会注意到的差异。您可以指定一个质量因子来指示您想要的压缩程度。在非常低的值下,您的图像确实会恶化,但在非常高的值下JPEG过程在视觉上是无损的;也就是说,它真的会看起来和原始图像一样好。


质量因子的范围从1到99,如果你不给它指定一个,它会选择值93,非正式地等同于“相当高的质量”。要以不同的质量级别保存JPEG,请使用-q(或等效的--quality)参数,如下所示:

libcamera-still -q 80 -o test.jpg


尝试使用10和50这样的质量值,看看你得到了什么!

PNG文件


PNG(或“Portable Network Graphic”)是另一种广泛支持的文件和压缩格式。PNG是一种无损压缩格式,这意味着您可以保证恢复与开始时完全相同的图像(与JPEG不同)。不利的一面是,PNG文件通常比JPEG文件大,而且它们更难创建,需要更长的时间。

要保存PNG文件,您需要告诉libcamera-still ,您希望使用-e或--encoder参数使用不同的编码器,如下所示:

libcamera-still -e png -o test.png


请注意,必须指定-e选项才能获得PNG文件——仅更改文件名是不够的。PNG不支持质量参数。

DNG文件


DNG(或“Digital NeGative”)文件与PNG文件截然不同。顾名思义,它们在某种程度上类似于我们在将其显影成照片之前从胶片相机中获得的“底片”。在我们的案例中,在树莓派上的硬件将其“开发”为可视(JPEG或PNG)图像之前,DNG文件存储从图像传感器接收的原始数字。DNG文件与同一图像的“开发”JPEG或PNG版本一起保存。要保存DNG文件,请使用-r(或--raw)参数:

libcamera-still -r test.jpg


libcamera-still会自动将dng文件名中的.jpg替换为.dng,在这种情况下同时提供test.dng和test.jpg。

存在许多第三方软件程序以交互方式“开发”这些DNG文件——这是一个相当复杂的过程,超出了本指南的范围。

延时捕获

延时捕捉是指我们每隔一段时间(可能是每分钟、每小时或每一天)捕捉一张图像,然后将它们重新组合成视频,以更快的速度播放。libcamera-still已经准备好了,可以直接捕获我们需要的图像。

树莓派摄像头模块能够捕捉各种不同格式的图像,包括JPEG、PNG和DNG


我们需要引入——延时选项,我们将回顾我们之前看到的几个选项。


-ttimeout。执行捕获的时间长度(以毫秒为单位)。在延时的情况下,libcamera-still会在这段总的时间内运行捕获。您可以传递值0,意思是“无限期运行”(您必须手动停止libcamera-still,例如按键盘上的CTRL+C)。

–timelapse.。每次延时捕获之间的时间长度,同样以毫秒为单位。

-o–output。输出文件的名称。对于延时拍摄,我们不能给所有图像起相同的名字,所以我们使用了一种特殊的语法,其中包括一个图像计数器。例如,-o capture_%04d.jpg表示所有文件都命名为“capture_”,后面跟着一个计数器,然后是.jpg。%04d指定计数器的格式,在这种情况下,0表示将前导零添加到数字上,4表示“使每个数字至少有4位”。这很有用,这样列出您的图像文件将按时间顺序返回给您。

让我们举一个例子。

 libcamera-still -o capture_%04d.jpg
--timelapse 5000 -t 30000 --width 1024
--height 768

这将运行30秒,每5秒捕获一张图像,它们将被命名为capture_0000.jpg到capture_0004.jpg。

请注意,我们是如何将图像的分辨率降低到更适合我们想要创建的最终视频的分辨率的。

将图像组合成视频

有一个叫做FFmpeg的方便工具,它能够将静止图像序列转换为视频。我们可以这样使用它:

ffmpeg -r 2 -i capture_%04d.jpg video.mp4

请注意,我们如何使用特殊的%语法来格式化输入文件的名称,方法与我们对 libcamera-still所做的相同。-r参数给出输出视频的帧速率,这里为每秒2帧。我们选择了MP4格式的输出文件,并将其命名为video.MP4。

FFmpeg是一个非常通用的工具,我们建议您学习一下。

按下按键时捕获

我们也可以根据事件或按键进行拍摄,而不是定期拍摄。有几个新的选项参数需要学习。

–datetime。使用这个(而不是-o)会以当前日期和时间命名输出文件。格式为MMDDhhmmss.jpg,其中MM和DD是月份和日期编号,hh、MM和ss是小时、分钟和秒。

-k–keypress。按下键盘上的ENTER键时拍摄图像。键入X并按ENTER键退出。

要使用的命令如下:

libcamera-still -t 0 --keypress --datetime


在这里,我们无限期地运行捕获,所以我们必须键入X,然后键入ENTER才能退出(或按CTRL+C)。文件的名称类似于0405102742.jpg,意思是“4月5日上午10:27,42秒”。

响应信号捕获


对于那些熟悉Linux信号(signals)的人来说,按下按键的另一种选择是发送信号。要做到这一点,只需使用-s--signal而不是-k(或--keypress)。


要向libcamera-still发送捕获信号,请首先启动它,然后在另一个终端窗口中键入以下内容:

kill -SIGUSR1 `pidof libcamera-still`


您可以使用以下命令强制libcamera-still退出:

kill -SIGUSR2 `pidof libcamera-still`

HDR(高动态范围)可以在摄像头模块3上使能,以使您拍摄的图像具有更高的对比度

自动对焦和高动态范围在撰写本文时,仅树莓派摄像头模块3支持自动对焦和高动态范围成像。

自动对焦


使用摄像头模块3时,会在连续模式下自动启用自动对焦。这意味着摄像头镜头将在必要时移动,以在图像的中心部分保持最佳焦点,这可能是大多数用户在大多数时候想要的。


还可以手动关闭自动对焦并设置镜头的对焦位置。要做到这一点,请使用--lens-position参数,并传递一个以屈光度测量的值,即焦距的倒数。因此,在大约0.1米的非常近的距离处聚焦时传入值10(即1/0.1)。若要将焦点集中在无穷大,请传入0(也就是 1/无穷大)。您也可以传入非整数值。例如:

libcamera-still --lens-position 0 -o infinity.jpg


…将焦点位置设置为无穷远,并且不会再次移动镜头。

高动态范围成像

摄像头模块3支持高动态范围(HDR)成像。要使用它,请在命令行中指定--hdr选项,例如:

libcamera-still --hdr -o hdr.jpg


请注意,非HDR捕获可以以4608×2592像素的最大分辨率执行,但由于支持HDR所需传感器的特殊性质,HDR捕获仅限于2304×1296像素(正好是非HDR模式宽度和高度的一半)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2485

    浏览量

    46534
  • 摄像头
    +关注

    关注

    59

    文章

    4610

    浏览量

    92905
  • 树莓派
    +关注

    关注

    113

    文章

    1640

    浏览量

    104750

原文标题:树莓派摄像头模块:静态图像捕捉

文章出处:【微信号:Arm软件开发者,微信公众号:Arm软件开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    树莓Raspbian系统上怎么安装LINUX的摄像头驱动?

    树莓Raspbian系统上,能装一些LINUX的摄像头驱动吗?驱动怎么安装?是直接打开文件还是要有什么命令?
    发表于 07-28 15:30

    树莓2 motion,csi摄像头问题

    摄像头支持但是在ls /dev/中没有看到video0通过raspstill -0 image.png可以获取到图片,看到也是有图像的motion必须通过sudo motion启动但是通过
    发表于 11-10 09:58

    自动网络上传的树莓监控相机

    2.7,安装Python PiCamera模块第三步:插入摄像头蓝带子的朝向,摄像头插入方向要和图上一样,否则摄取的图像是颠倒的。可以用橡皮筋来固定,但千万不要太紧以免破坏相机的光电
    发表于 01-04 15:45

    树莓摄像头问题

    请问树莓安装好官方的摄像头之后,测试摄像头时显示mmal: No data received from sensor. Check all connections, includin
    发表于 08-08 22:47

    树莓的sci摄像头motion怎么用?

    树莓的sci摄像头motion怎么用
    发表于 09-17 22:48

    【新手求助】关于树莓+opencv+摄像头图像处理的问题?

    使用树莓3B,原装摄像头800W像素,c++和opencv。对亮斑进行拍摄,并求取光斑重心。怎么能有效提高精度和速度?流程是这样的:opencv控制摄像头拍照;提取单通道像素值;op
    发表于 11-09 08:57

    请问USB摄像头怎么在树莓中实现拍照功能?

    求助各位大神USB摄像头怎么在树莓中实现拍照功能
    发表于 05-28 05:56

    为什么树莓安装摄像头成功后/dev/中找不到video设备?

    摄像头树莓自带的CSI摄像头,安装好摄像头后联网输入sudo apt-get update 和sudo apt-get upgrade.
    发表于 08-18 19:30

    为什么树莓使用u***摄像头后/dev中找不到video0?

    树莓连接u***摄像头后输入lsu***,显示: Bus 001 Device 009: ID 1c88:0007 Somagic, Inc. SMI Grabber (EasyCAP DC60+
    发表于 09-27 05:55

    树莓摄像头

    树莓使用专用摄像头是遇到了图片上的问题:在putty上输入代码 raspistill -o keychain.jpg -t 2000回车之后,putty就不在出现命令 pi@raspberrypi:~ $ 也不运行程序
    发表于 10-22 17:57

    请问树莓官方的摄像头能进行实时监控吗?

    请问树莓官方的摄像头不能进行实时监控吗!是不是实现实时监控只能用USB摄像头啊!
    发表于 11-11 05:55

    【大联大友尚安森美半导体感光芯片USB双目摄像头模组试用体验】当摄像头遇上了树莓

    `发帖人:tobot我们知道树莓是当前最火的开发板(之一都可以去掉),不能不说那摄像头接在树莓派上做一评测,当然了我这里的摄像头的确有点小
    发表于 09-23 11:58

    【大联大友尚安森美半导体感光芯片USB双目摄像头模组试用体验】如何固化树莓中的摄像头索引

    只能装驱动,但不能显示图像(例如我拿到的IR摄像头),又希望整体调试,并不是很方便,于是在树莓中对不同摄像头分别创建索引。方法如下:1、查
    发表于 09-23 13:46

    如何用树莓派来连接摄像头

    比较详细的原理,但没有代码示例用ov7670做的师兄的指导:我们需要的是用树莓派来连接摄像头树莓再连接stm32,stm32主要工作就是给海康的
    发表于 08-05 07:40

    介绍一下树莓外接摄像头之后怎么通过调库的方式来实现监控功能

    文章目录前言一、准备工作1.需要的模块和单片机2.下载需要的库3.下载实现监控的主体库二、编译并运行程序1.编译库2.启动软件总结前言今天来介绍一下树莓外接摄像头之后怎么通过调库的方
    发表于 02-17 07:46