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為3元組(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可進行盡可能快速的播放。
常數¶