class ImageIO – ImageIO-Objekt¶
Die Klasse ImageIO zeichnet Streams von Image-Einzelbildern in OpenMVs nativem Festplattenformat auf und gibt sie wieder. Ein einzelner Stream kann heterogene Einzelbilder enthalten (unterschiedliche Pixelformate / Größen) und zeichnet das Intervall zwischen den Einzelbildern für jedes auf, sodass die Wiedergabe die ursprüngliche Bildrate wiederherstellt.
Es gibt zwei Speicherorte:
Datei-Stream – Einzelbilder werden aus einer Datei im Dateisystem gelesen bzw. an sie angehängt. Die Datei beginnt mit einem 16-Byte-Magic-Header
OMV IMG STR Vx.y, gefolgt von Chunks pro Einzelbild. Der aktuelle Writer gibtV2.0aus; ältereV1.0- undV1.1-Dateien sind weiterhin lesbar.Speicher-Stream – Einzelbilder werden aus einem zur Konstruktionszeit zugewiesenen RAM-Puffer fester Größe gelesen bzw. in ihn geschrieben. Nützlich, um Einzelbilder durch Filter zu schleusen, die eine Aufzeichnung benötigen, ohne das Dateisystem anzutasten.
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
Erstellt einen
ImageIO-Stream.Ist
pathein String, wird ein Datei-Stream an diesem Pfad geöffnet.modemuss einer der folgenden sein:Ist
pathein 3-Tupel(w, h, pixformat), wird ein Speicher-Stream zugewiesen.modeist dann die ganzzahlige Anzahl der vorab zuzuweisenden Einzelbild-Slots. Der Puffer wird fürcountEinzelbilder von(w, h, pixformat)dimensioniert und darf nach der Erstellung nicht wachsen.pixformatist eines vonimage.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEGoderimage.PNG. Für die komprimierten Formate (image.JPEG,image.PNG) wird die Größe pro Slot mit 2 bpp geschätzt; Einzelbilder, die größer als die Schätzung sind, lösen zurwrite()-ZeitValueErroraus.Inspektion¶
- type() int¶
Gibt den Speicherort des Streams zurück:
FILE_STREAMfür einen Datei-Stream,MEMORY_STREAMfür einen Speicher-Stream.
- is_closed() bool¶
Gibt
Truezurück, wennclose()für dieses Objekt aufgerufen wurde. Nach dem Schließen löst der Stream bei jedem weiteren Lese-/Schreib-/Seek-VorgangOSError("Stream closed")aus.
- count() int¶
Gibt die Anzahl der aktuell im Stream gespeicherten Einzelbilder zurück. Bei Datei-Streams wächst diese, wenn
write()Einzelbilder anhängt; bei Speicher-Streams ist sie zur Konstruktionszeit festgelegt.
- offset() int¶
Gibt den aktuellen Einzelbild-Index zurück. Wird durch
read()undwrite()inkrementiert und durchseek()zurückgesetzt.
- version() int | None¶
Gibt die Festplatten-Formatversion für Datei-Streams zurück (
10fürV1.0,11fürV1.1,20fürV2.0). GibtNonefür Speicher-Streams zurück.
I/O¶
- write(img: Image) ImageIO¶
Hängt
imgan (Datei-Stream) bzw. speichert es an der Offset-Position (Speicher-Stream) und erhöhtoffset()um eins.Bei Datei-Streams wächst die Datei, wenn Einzelbilder angehängt werden. Das Schreiben an einem Offset, der nicht am Ende liegt, kürzt den Rest der Datei, sodass die Anzahl schrumpfen kann.
Bei Speicher-Streams wird das Einzelbild in den aktuellen Slot geschrieben; das Schreiben über den letzten Slot hinaus löst
EOFError("End of stream")aus, und das Schreiben eines Einzelbilds, das größer alsbuffer_size()ist, löstValueError("Invalid frame size")aus.Gibt
selfzurück, sodass Aufrufe verkettet werden können.
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
Liest das Einzelbild am aktuellen
offset(), erhöht den Offset und gibt das neueImagezurück. Spiegelt die Wiedergabe-Hälfte vonwrite()wider.copy_to_fb– wennTrue(Standard), wird das dekodierte Einzelbild in den Kamera-Framebuffer gelegt (dieselbe Stelle, an der eincsi.CSI.snapshot()landet), sodass das zurückgegebeneImageüber die IDE-Vorschau zeichenbar ist. WennFalse, wird das Einzelbild stattdessen auf dem MicroPython-Heap zugewiesen.loop(nur Datei-Streams) – wennTrue(Standard), springt das Lesen über das letzte Einzelbild hinaus zum ersten Einzelbild zurück und fährt fort. WennFalse, gibt der AufrufNonezurück, sobald das Ende der Datei erreicht ist.pause– wennTrue(Standard), blockiert der Aufruf, bis das ursprünglich aufgezeichnete Intervall zwischen den Einzelbildern verstrichen ist, sodass die Wiedergabe mit der nativen Bildrate der Aufzeichnung läuft. AufFalsesetzen für eine so schnell wie mögliche Wiedergabe.
- seek(offset: int) ImageIO¶
Verschiebt
offset()zum Einzelbildoffset.offsetmuss nicht negativ sein; Speicher-Stream-Offsets müssen zudem kleiner alscount()sein.Datei-Stream-Seeks durchlaufen die Datei Einzelbild für Einzelbild vom Anfang an, da Einzelbild-Chunks variable Größen haben – rechnen Sie bei großen Sprüngen mit O(offset)-Zeit.
Gibt
selfzurück, sodass Aufrufe verkettet werden können.
- sync() ImageIO¶
Schreibt ausstehende Schreibvorgänge bei Datei-Streams auf die Festplatte (ruft das
syncdes zugrunde liegenden Dateisystems auf). Bei Speicher-Streams ohne Wirkung.Gibt
selfzurück, sodass Aufrufe verkettet werden können.
- close() None¶
Schließt den Stream. Gibt den Speicherpuffer frei (Speicher-Streams) oder schließt die Datei (Datei-Streams). Nach
close()kann dasImageIO-Objekt nicht wiederverwendet werden; nachfolgende Operationen lösenOSError("Stream closed")aus. Ein zweimaliger Aufruf vonclose()hat keine Wirkung.Ein
ImageIOwird auch automatisch geschlossen, wenn es vom Garbage Collector eingesammelt wird (es registriert zur Konstruktionszeit einen Finalizer).
Konstanten¶