class TVDisplay – Driver do TV Shield¶
A classe TVDisplay aciona o OpenMV TV Shield, que converte um framebuffer RGB565 em um sinal de vídeo composto NTSC (352x240, 60 campos/s entrelaçado) adequado para qualquer televisão ou monitor de vídeo analógico.
Há suporte a duas variantes de shield:
O TV Shield com fio, que expõe o sinal composto em um único conector RCA.
O Wireless TV Shield, que alimenta o mesmo sinal em um transmissor de vídeo analógico de 2,4 GHz. O canal do receptor (1–8) é selecionado em tempo de execução via
ioctl()comdisplay.IOCTL_CHANNEL; até que essa chamada seja feita, nenhum canal é selecionado.
A resolução e o enquadramento são fixos – TVDisplay não recebe um argumento framesize. Os quadros são apresentados passando uma image.Image para write(), que trata internamente do escalonamento, ROI, paleta e transformações de orientação.
Exemplo de uso:
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())
Construtores¶
- class display.TVDisplay(triple_buffer: bool = True)¶
triple_bufferSe True, torna as atualizações da tela não bloqueantes ao custo de 3X o tamanho do display em RAM. O padrão depende da placa.- deinit() None¶
Libera os pinos de E/S e a RAM usados pela classe. Isso é chamado automaticamente na destruição.
- 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¶
Exibe uma
imagecujo canto superior esquerdo começa na localização x, y.x_scalecontrola o quanto a imagem exibida é escalada na direção x (float). Se este valor for negativo, a imagem será espelhada horizontalmente.y_scalecontrola o quanto a imagem exibida é escalada na direção y (float). Se este valor for negativo, a imagem será espelhada verticalmente.roié a tupla de retângulo da região de interesse (x, y, w, h) da imagem a exibir.rgb_channelé o canal RGB (0=R, G=1, B=2) a extrair de uma imagem RGB565 e renderizar no display.alphacontrola o quão opaca é a imagem. Um valor de 256 exibe uma imagem opaca, enquanto um valor menor que 256 produz uma imagem preta transparente. 0 resulta em uma imagem perfeitamente preta.color_palettese não for-1pode ser um enum de paleta de cores ou uma imagem RGB565 de 256 pixels no total a ser usada como tabela de consulta de cores sobre o valor em escala de cinza da imagem de entrada.alpha_palettese não for-1pode ser uma imagem GRAYSCALE de 256 pixels no total a ser usada como paleta de alpha, que modula o valor dealphada imagem de entrada em nível de pixel.hintOR lógico das flags:image.AREA: Usa escalonamento por área ao reduzir a escala.image.BILINEAR: Usa escalonamento bilinear.image.BICUBIC: Usa escalonamento bicúbico.image.CENTER: Centraliza a imagem no display (após o escalonamento).image.HMIRROR: Espelha horizontalmente a imagem.image.VFLIP: Inverte verticalmente a imagem.image.TRANSPOSE: Transpõe a imagem (troca x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Aplica a extração dergb_channelantes do escalonamento.image.APPLY_COLOR_PALETTE_FIRST: Aplicacolor_paletteantes do escalonamento.image.SCALE_ASPECT_KEEP: Escala para caber dentro do display.image.SCALE_ASPECT_EXPAND: Escala para preencher o display (recortando).image.SCALE_ASPECT_IGNORE: Escala para preencher o display (esticando).image.ROTATE_90: Rotaciona em 90 graus (VFLIP | TRANSPOSE).image.ROTATE_180: Rotaciona em 180 graus (HMIRROR | VFLIP).image.ROTATE_270: Rotaciona em 270 graus (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Limpa a tela para preto.
display_offé aceito por compatibilidade de API com outras classes de display e é ignorado.
- ioctl(cmd: int, *args) object¶
Ponto de entrada ioctl genérico.
Passe
display.IOCTL_CHANNELcomocmdpara definir ou obter o canal de transmissão do wireless TV shield. Com um segundo argumento (1-8) o canal é definido; sem um segundo argumento o canal atual é retornado. Nenhum canal é selecionado até que a primeira chamada de definição seja feita.