class ImageIO -- ImageIO 对象¶
ImageIO 类以 OpenMV 原生的磁盘格式记录和回放 Image 帧流。单个流可以保存异构的帧(不同的像素格式/尺寸),并为每一帧记录帧间间隔,因此回放时会重现原始的帧率。
共有两种后备存储:
文件流 —— 帧从文件系统上的某个文件读取或追加到该文件。文件以一个 16 字节的魔术头
OMV IMG STR Vx.y开头,后面跟着各帧的数据块。当前的写入器输出V2.0;较旧的V1.0和V1.1文件仍可读取。内存流 —— 帧从构造时分配的固定大小 RAM 缓冲区读取或写入。在需要录制但又不想触及文件系统的滤波器之间往返传递帧时非常有用。
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
创建一个
ImageIO流。如果
path是一个字符串,则在该路径处打开一个文件流。mode必须为以下之一:如果
path是一个三元组(w, h, pixformat),则分配一个内存流。此时mode是要预分配的帧槽位数量(整数)。缓冲区按count个(w, h, pixformat)帧的大小分配,并且在创建后不允许增长。pixformat为image.BINARY、image.GRAYSCALE、image.RGB565、image.BAYER、image.YUV422、image.JPEG或image.PNG之一。对于压缩格式(image.JPEG、image.PNG),每个槽位的大小按 2 bpp 估算;大于估算值的帧会在write()时引发ValueError。检视¶
- type() int¶
返回流的后备存储类型:文件流为
FILE_STREAM,内存流为MEMORY_STREAM。
I/O¶
- write(img: Image) ImageIO¶
追加(文件流)或在偏移处存储(内存流)
img,并将offset()前进一位。对于文件流,文件随着帧的追加而增长。在非末尾偏移处写入会截断文件的其余部分,因此帧数可能会缩减。
对于内存流,帧会被写入当前槽位;写入超过最后一个槽位会引发
EOFError("End of stream"),写入大于buffer_size()的帧会引发ValueError("Invalid frame size")。返回
self,因此调用可以链式串联。
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
读取当前
offset()处的帧,将偏移前进,并返回新的Image。与write()的回放对应部分相对应。copy_to_fb—— 当为True(默认)时,解码后的帧会被放入摄像头帧缓冲区(与csi.CSI.snapshot()落点相同),因此返回的Image可通过 IDE 预览绘制。当为False时,帧改为在 MicroPython 堆上分配。loop(仅限文件流)—— 当为True(默认)时,读取超过最后一帧会定位回第一帧并继续。当为False时,一旦到达文件末尾,调用返回None。pause—— 当为True(默认)时,调用会阻塞,直到原始记录的帧间间隔过去为止,从而以记录的原生帧率进行回放。设为False可实现尽可能快的回放。
常量¶