třída TVDisplay – ovladač TV Shieldu¶
Třída TVDisplay řídí OpenMV TV Shield, který převádí RGB565 framebuffer na kompozitní video signál NTSC (352x240, 60 půlsnímků/s prokládaně) vhodný pro libovolný televizor nebo analogový video monitor.
Podporovány jsou dvě varianty shieldu:
Drátový TV Shield, který vyvádí kompozitní signál na jeden RCA konektor.
Wireless TV Shield, který přivádí stejný signál do analogového video vysílače 2,4 GHz. Kanál přijímače (1–8) se vybírá za běhu pomocí
ioctl()sdisplay.IOCTL_CHANNEL; dokud není toto volání provedeno, není vybrán žádný kanál.
Rozlišení a rámování jsou pevné – TVDisplay nepřijímá argument framesize. Snímky se zobrazují předáním objektu image.Image metodě write(), která interně zajišťuje škálování, ROI, paletu a transformace orientace.
Příklad použití:
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())
Konstruktory¶
- class display.TVDisplay(triple_buffer: bool = True)¶
triple_bufferPokud je True, učiní aktualizace obrazovky neblokujícími za cenu 3násobku velikosti displeje v RAM. Výchozí hodnota závisí na desce.- 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¶
Zobrazí obraz
image, jehož levý horní roh začíná na pozici x, y.x_scaleřídí, jak moc je zobrazený obraz škálován ve směru osy x (float). Pokud je tato hodnota záporná, obraz bude vodorovně převrácen.y_scaleřídí, jak moc je zobrazený obraz škálován ve směru osy y (float). Pokud je tato hodnota záporná, obraz bude svisle převrácen.roije n-tice obdélníku oblasti zájmu (x, y, w, h) obrazu, který se má zobrazit.rgb_channelje RGB kanál (0=R, G=1, B=2), který se má extrahovat z RGB565 obrazu a vykreslit na displeji.alphařídí, jak neprůhledný je obraz. Hodnota 256 zobrazí neprůhledný obraz, zatímco hodnota nižší než 256 produkuje černý průhledný obraz. 0 vede k dokonale černému obrazu.color_palette, pokud není-1, může být enum barevné palety nebo RGB565 obraz o celkem 256 pixelech použitý jako vyhledávací tabulka barev pro hodnotu vstupního obrazu ve stupních šedi.alpha_palette, pokud není-1, může být GRAYSCALE obraz o celkem 256 pixelech použitý jako alfa paleta, která moduluje hodnotualphavstupního obrazu na úrovni jednotlivých pixelů.hintlogický OR z příznaků:image.AREA: Použít plošné škálování při zmenšování.image.BILINEAR: Použít bilineární škálování.image.BICUBIC: Použít bikubické škálování.image.CENTER: Vystředit obraz na displeji (po škálování).image.HMIRROR: Vodorovně zrcadlit obraz.image.VFLIP: Svisle převrátit obraz.image.TRANSPOSE: Transponovat obraz (zaměnit x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplikovat extrakcirgb_channelpřed škálováním.image.APPLY_COLOR_PALETTE_FIRST: Aplikovatcolor_palettepřed škálováním.image.SCALE_ASPECT_KEEP: Škálovat tak, aby se vešel do displeje.image.SCALE_ASPECT_EXPAND: Škálovat tak, aby vyplnil displej (s ořezem).image.SCALE_ASPECT_IGNORE: Škálovat tak, aby vyplnil displej (s roztažením).image.ROTATE_90: Otočit o 90 stupňů (VFLIP | TRANSPOSE).image.ROTATE_180: Otočit o 180 stupňů (HMIRROR | VFLIP).image.ROTATE_270: Otočit o 270 stupňů (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Vymaže obrazovku na černou.
display_offje přijímán kvůli kompatibilitě API s ostatními třídami displejů a je ignorován.
- ioctl(cmd: int, *args) object¶
Generický vstupní bod ioctl.
Předejte
display.IOCTL_CHANNELjakocmdpro nastavení nebo získání vysílacího kanálu bezdrátového TV shieldu. S druhým argumentem (1-8) se kanál nastaví; bez druhého argumentu se vrátí aktuální kanál. Dokud není provedeno první nastavovací volání, není vybrán žádný kanál.