class RGBDisplay – Controlador de pantalla RGB¶
La clase RGBDisplay controla pantallas LCD RGB paralelas de 24 bits a través del controlador STM32 LTDC (LCD-TFT). El LTDC transmite los píxeles directamente desde un framebuffer respaldado por SDRAM al reloj de píxeles elegido, por lo que es posible alcanzar tasas de refresco altas (hasta 120 Hz) sin intervención de la CPU.
En la OpenMV Cam Pure Thermal, el mismo bus paralelo de 24 bits también alimenta un codificador HDMI TFP410 integrado, por lo que su salida HDMI también se controla a través de esta clase. Utilice display_on=False para apagar la pantalla LCD integrada mientras se siguen enviando píxeles al codificador.
La resolución del panel se selecciona mediante framesize usando las constantes definidas en el módulo display (QVGA, VGA, WVGA, HD, FHD, …). Las secuencias de inicialización específicas de cada panel se conectan mediante el argumento de palabra clave controller (por ejemplo, ST7701 para paneles basados en ST7701). El brillo de la retroiluminación se controla como un simple GPIO de forma predeterminada, o mediante DACBacklight / PWMBacklight si se pasa uno como backlight.
Los fotogramas se presentan llamando a write() con una image.Image. El controlador gestiona internamente la conversión RGB, el escalado, la ROI, la paleta y las transformaciones de orientación.
Ejemplo – reflejar la cámara en un panel de 480x272 a 60 Hz:
import csi
import display
import image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
lcd = display.RGBDisplay(framesize=display.FHVGA, refresh=60)
while True:
lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)
Constructores¶
- class display.RGBDisplay(framesize: int = display.FWVGA, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, controller: object | None = None, backlight: object | None = None)¶
framesizeUna de las resoluciones estándar admitidas (véanse las constantes del módulodisplay).refreshEstablece la tasa de refresco de la pantalla en hercios (30-120). Esto controla el reloj de píxeles del LCD RGB.display_onHabilita la salida LCD local. PaseFalseen la OpenMV Cam Pure Thermal, cuyo bus paralelo de 24 bits controla tanto la pantalla LCD integrada como el codificador HDMI TFP410; esto mantiene la pantalla LCD integrada apagada mientras se sigue alimentando el codificador HDMI. En otras OpenMV Cams no hay un destino compartido y se puede dejar en su valor predeterminado.triple_bufferSi esTrue, hace que las actualizaciones de la pantalla no sean bloqueantes a costa de triplicar el tamaño de la pantalla en RAM.portraitIntercambia el ancho y el alto del framesize.controllerPase una instancia de la clase del chip controlador para inicializarlo junto con la pantalla.backlightPase una instancia del módulo controlador de retroiluminación a usar. De forma predeterminada, la retroiluminación se controla mediante un pin GPIO.- deinit() None¶
Libera los pines de E/S y la RAM utilizados por la clase. Esto se llama automáticamente al destruirse.
- clear(display_off: bool = False) None¶
Borra la pantalla LCD a negro.
display_offsi esTrue, apaga la lógica de la pantalla en lugar de borrar el framebuffer a negro. También debe apagar la retroiluminación después de esto para asegurarse de que la pantalla se vuelva negra, ya que muchas pantallas se ven blancas cuando solo está encendida la retroiluminación.
- backlight(value: int | None = None) int¶
Establece el valor de atenuación de la retroiluminación del LCD, de 0 (apagado) a 100 (encendido). No pase argumentos para obtener el valor actual de la retroiluminación.
A menos que se haya pasado un controlador
DACBacklightoPWMBacklightal constructor, la retroiluminación se controla como un pin GPIO y solo irá de 0 (apagado) a un valor distinto de cero (encendido).
- 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 = 255, color_palette: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None¶
Muestra una
imagecuya esquina superior izquierda comienza en la ubicaciónx,y. También se puede pasar una cadena de ruta en lugar de un objeto de imagen para cargar automáticamente la imagen desde el disco.x_scalecontrola cuánto se escala la imagen mostrada en la dirección x. Si este valor es negativo, la imagen se volteará horizontalmente. Si no se especificay_scale, este coincidirá conx_scalepara mantener la relación de aspecto.y_scalecontrola cuánto se escala la imagen mostrada en la dirección y. Si este valor es negativo, la imagen se volteará verticalmente (requiere triple búfer). Si no se especificax_scale, este coincidirá cony_scalepara mantener la relación de aspecto.roies la tupla del rectángulo de región de interés(x, y, w, h)de la imagen a mostrar.rgb_channeles el canal RGB (0=R, 1=G, 2=B) a extraer de una imagen RGB565 y renderizar en escala de grises.-1desactiva la extracción de canal.alphacontrola cuán opaca es la imagen, de 0 (totalmente transparente / negro) a 255 (opaco).color_paletteuna imagen RGB565 de 256 píxeles en total usada como tabla de búsqueda de color sobre el valor en escala de grises de la imagen de entrada. Se aplica después de la extracción dergb_channel. También puede ser un enum de paleta (p. ej.image.PALETTE_RAINBOW).alpha_paletteuna imagen GRAYSCALE de 256 píxeles en total usada como tabla de búsqueda de alfa por píxel sobre el valor en escala de grises de la imagen de entrada. Se aplica después de la extracción dergb_channel.hintes un OR lógico de las banderas:image.AREA: Usa escalado por área al reducir en lugar del vecino más cercano.image.BILINEAR: Usa escalado bilineal en lugar del vecino más cercano.image.BICUBIC: Usa escalado bicúbico en lugar del vecino más cercano.image.CENTER: Centra la imagen en la pantalla (aplicado después del escalado).image.HMIRROR: Refleja la imagen horizontalmente.image.VFLIP: Voltea la imagen verticalmente.image.TRANSPOSE: Transpone la imagen (intercambia x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Realiza la extracción dergb_channelantes del escalado.image.APPLY_COLOR_PALETTE_FIRST: Aplicacolor_paletteantes del escalado.image.SCALE_ASPECT_KEEP: Escala la imagen para que quepa dentro de la pantalla.image.SCALE_ASPECT_EXPAND: Escala la imagen para que llene la pantalla (recortando).image.SCALE_ASPECT_IGNORE: Escala la imagen para que llene la pantalla (estirando).image.ROTATE_90: Rota 90 grados (VFLIP | TRANSPOSE).image.ROTATE_180: Rota 180 grados (HMIRROR | VFLIP).image.ROTATE_270: Rota 270 grados (HMIRROR | TRANSPOSE).