电子说
作者: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
我们需要引入——延时选项,我们将回顾我们之前看到的几个选项。
-t或–timeout。执行捕获的时间长度(以毫秒为单位)。在延时的情况下,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模式宽度和高度的一半)。
全部0条评论
快来发表一下你的评论吧 !