class ImageIO – ImageIO-objekt¶
Klassen ImageIO spelar in och spelar upp strömmar av Image-bildrutor i OpenMV:s inbyggda diskformat. En enskild ström kan innehålla heterogena bildrutor (olika pixelformat/storlekar) och registrerar intervallet mellan bildrutorna för var och en, så att uppspelningen återskapar den ursprungliga bildfrekvensen.
Det finns två lagringsbackender:
Filström – bildrutor läses från / läggs till i en fil i filsystemet. Filen inleds med ett 16-byte magiskt huvud
OMV IMG STR Vx.yföljt av segment per bildruta. Den nuvarande skrivaren genererarV2.0; äldreV1.0- ochV1.1-filer går fortfarande att läsa.Minnesström – bildrutor läses från / skrivs till en RAM-buffert med fast storlek som allokeras vid konstruktionstillfället. Användbart för att skicka bildrutor fram och tillbaka genom filter som behöver en inspelning utan att röra filsystemet.
- class image.ImageIO(path: str | Tuple[int, int, int], mode: str | int)¶
Skapa en
ImageIO-ström.Om
pathär en sträng öppnas en filström vid den sökvägen.modemåste vara något av:Om
pathär en 3-tupel(w, h, pixformat)allokeras en minnesström.modeär då heltalet antal bildrutefack som ska förallokeras. Bufferten dimensioneras förcountbildrutor med(w, h, pixformat)och tillåts inte växa efter skapandet.pixformatär något avimage.BINARY,image.GRAYSCALE,image.RGB565,image.BAYER,image.YUV422,image.JPEGellerimage.PNG. För de komprimerade formaten (image.JPEG,image.PNG) uppskattas storleken per fack till 2 bpp; bildrutor som är större än uppskattningen ger upphov tillValueErrorvidwrite().Inspektion¶
- type() int¶
Returnera strömmens lagringsbackend:
FILE_STREAMför en filström,MEMORY_STREAMför en minnesström.
- is_closed() bool¶
Returnera
Trueomclose()har anropats på det här objektet. När strömmen väl är stängd ger denOSError("Stream closed")vid alla ytterligare läs-/skriv-/sökoperationer.
- count() int¶
Returnera antalet bildrutor som för närvarande lagras i strömmen. För filströmmar växer detta i takt med att
write()lägger till bildrutor; för minnesströmmar är det fast vid konstruktionstillfället.
- offset() int¶
Returnera det aktuella bildruteindexet. Ökas av
read()ochwrite(), återställs avseek().
- version() int | None¶
Returnera diskformatets version för filströmmar (
10förV1.0,11förV1.1,20förV2.0). ReturnerarNoneför minnesströmmar.
I/O¶
- write(img: Image) ImageIO¶
Lägg till (filström) eller lagra-vid-offset (minnesström)
imgoch ökaoffset()med ett.För filströmmar växer filen i takt med att bildrutor läggs till. Skrivning vid en offset som inte är i slutet trunkerar resten av filen, så att antalet kan minska.
För minnesströmmar skrivs bildrutan in i det aktuella facket; skrivning bortom det sista facket ger upphov till
EOFError("End of stream")och skrivning av en bildruta som är större änbuffer_size()ger upphov tillValueError("Invalid frame size").Returnerar
selfså att anrop kan kedjas.
- read(copy_to_fb: bool = True, *, loop: bool = True, pause: bool = True) Image | None¶
Läs bildrutan vid den aktuella
offset(), öka offseten och returnera den nyaImage. Speglar uppspelningshalvan avwrite().copy_to_fb– närTrue(standard) placeras den avkodade bildrutan i kamerans bildbuffert (samma plats som encsi.CSI.snapshot()hamnar i), så att den returneradeImagegår att rita via IDE-förhandsvisningen. NärFalseallokeras bildrutan istället på MicroPython-heapen.loop(endast filströmmar) – närTrue(standard) söker läsning bortom den sista bildrutan tillbaka till den första bildrutan och fortsätter. NärFalsereturnerar anropetNonenär filens slut har nåtts.pause– närTrue(standard) blockerar anropet tills det ursprungligen inspelade intervallet mellan bildrutorna har förflutit, så att uppspelningen körs med inspelningens ursprungliga bildfrekvens. Sätt tillFalseför uppspelning så snabbt som möjligt.
- seek(offset: int) ImageIO¶
Flytta
offset()till bildrutanoffset.offsetmåste vara icke-negativ; offseter för minnesströmmar måste dessutom vara mindre äncount().Sökningar i filströmmar går igenom filen bildruta för bildruta från början, eftersom bildrutesegmenten är av varierande storlek – räkna med O(offset)-tid för stora hopp.
Returnerar
selfså att anrop kan kedjas.
- sync() ImageIO¶
Spola väntande skrivningar till disk för filströmmar (anropar det underliggande filsystemets
sync). Gör ingenting för minnesströmmar.Returnerar
selfså att anrop kan kedjas.
- close() None¶
Stäng strömmen. Frigör minnesbufferten (minnesströmmar) eller stänger filen (filströmmar). Efter
close()kanImageIO-objektet inte återanvändas; efterföljande operationer ger upphov tillOSError("Stream closed"). Att anropaclose()två gånger gör ingenting.En
ImageIOstängs också automatiskt när den skräpsamlas (den registrerar en finaliserare vid konstruktionstillfället).
Konstanter¶