class TVDisplay – Driver pentru TV Shield¶
Clasa TVDisplay acționează OpenMV TV Shield, care convertește un tampon de cadre RGB565 într-un semnal video compus NTSC (352x240, 60 câmpuri/s întrețesut) potrivit pentru orice televizor sau monitor video analogic.
Sunt acceptate două variante de shield:
Versiunea cu fir TV Shield, care expune semnalul compus pe o singură mufă RCA.
Versiunea Wireless TV Shield, care alimentează același semnal într-un transmițător video analogic de 2,4 GHz. Canalul receptorului (1–8) este selectat la rulare prin
ioctl()cudisplay.IOCTL_CHANNEL; până la efectuarea acelui apel niciun canal nu este selectat.
Rezoluția și încadrarea sunt fixe – TVDisplay nu acceptă un argument framesize. Cadrele sunt prezentate prin transmiterea unui image.Image către write(), care gestionează intern scalarea, ROI-ul, paleta și transformările de orientare.
Exemplu de utilizare:
import csi
import display
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.SIF) # 352x240, matches the TV output
tv = display.TVDisplay()
while True:
tv.write(csi0.snapshot())
Constructori¶
- class display.TVDisplay(triple_buffer: bool = True)¶
triple_bufferDacă este True, atunci face actualizările ecranului neblocante, cu prețul a de 3X dimensiunea afișajului în RAM. Valoarea implicită depinde de placă.- deinit() None¶
Eliberează pinii I/O și RAM-ul utilizate de clasă. Acest lucru este apelat automat la distrugere.
- write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 256, color_palette: int | 'image.Image' | None = None, alpha_palette: 'image.Image' | None = None, hint: int = 0) None¶
Afișează o
imageal cărei colț din stânga sus începe la locația x, y.x_scalecontrolează cât de mult este scalată imaginea afișată pe direcția x (număr zecimal). Dacă această valoare este negativă, imaginea va fi întoarsă orizontal.y_scalecontrolează cât de mult este scalată imaginea afișată pe direcția y (număr zecimal). Dacă această valoare este negativă, imaginea va fi întoarsă vertical.roieste tuplul dreptunghiular al regiunii de interes (x, y, w, h) al imaginii de afișat.rgb_channeleste canalul RGB (0=R, G=1, B=2) de extras dintr-o imagine RGB565 și de redat pe afișaj.alphacontrolează cât de opacă este imaginea. O valoare de 256 afișează o imagine opacă, în timp ce o valoare mai mică de 256 produce o imagine neagră transparentă. 0 produce o imagine perfect neagră.color_palettedacă nu este-1poate fi o enumerare de paletă de culori sau o imagine RGB565 de 256 de pixeli în total de utilizat ca tabel de căutare a culorilor pe valoarea în tonuri de gri a imaginii de intrare.alpha_palettedacă nu este-1poate fi o imagine GRAYSCALE de 256 de pixeli în total de utilizat ca paletă alfa care modulează valoareaalphaa imaginii de intrare la nivel de pixel.hintSAU logic al indicatorilor:image.AREA: Utilizează scalarea pe arie la reducerea dimensiunii.image.BILINEAR: Utilizează scalarea biliniară.image.BICUBIC: Utilizează scalarea bicubică.image.CENTER: Centrează imaginea pe afișaj (după scalare).image.HMIRROR: Oglindește orizontal imaginea.image.VFLIP: Întoarce vertical imaginea.image.TRANSPOSE: Transpune imaginea (interschimbă x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplică extragereargb_channelînainte de scalare.image.APPLY_COLOR_PALETTE_FIRST: Aplicăcolor_paletteînainte de scalare.image.SCALE_ASPECT_KEEP: Scalează pentru a se încadra în afișaj.image.SCALE_ASPECT_EXPAND: Scalează pentru a umple afișajul (decupând).image.SCALE_ASPECT_IGNORE: Scalează pentru a umple afișajul (întinzând).image.ROTATE_90: Rotește cu 90 de grade (VFLIP | TRANSPOSE).image.ROTATE_180: Rotește cu 180 de grade (HMIRROR | VFLIP).image.ROTATE_270: Rotește cu 270 de grade (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Șterge ecranul la negru.
display_offeste acceptat pentru compatibilitatea API cu alte clase de afișaj și este ignorat.
- ioctl(cmd: int, *args) object¶
Punct de intrare ioctl generic.
Transmiteți
display.IOCTL_CHANNELcacmdpentru a seta sau obține canalul de difuzare al shield-ului TV wireless. Cu un al doilea argument (1-8) canalul este setat; fără un al doilea argument se returnează canalul curent. Niciun canal nu este selectat până la efectuarea primului apel de setare.