класс TVDisplay – Драйвер TV Shield¶
Класс TVDisplay управляет OpenMV TV Shield, который преобразует RGB565-буфер кадра в композитный видеосигнал NTSC (352x240, 60 полей/с с чересстрочной развёрткой), подходящий для любого телевизора или аналогового видеомонитора.
Поддерживаются два варианта шилда:
Проводной TV Shield, который выводит композитный сигнал на единственный разъём RCA.
Wireless TV Shield, который подаёт тот же сигнал на аналоговый видеопередатчик 2,4 ГГц. Канал приёмника (1–8) выбирается во время выполнения через
ioctl()сdisplay.IOCTL_CHANNEL; до выполнения этого вызова ни один канал не выбран.
Разрешение и кадрирование фиксированы – TVDisplay не принимает аргумент framesize. Кадры выводятся путём передачи image.Image в write(), который внутренне обрабатывает масштабирование, ROI, палитру и преобразования ориентации.
Пример использования:
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())
Конструкторы¶
- class display.TVDisplay(triple_buffer: bool = True)¶
triple_bufferЕсли True, то делает обновления экрана неблокирующими ценой утроенного размера дисплея в RAM. Значение по умолчанию зависит от платы.- deinit() None¶
Освобождает выводы ввода/вывода и RAM, используемые классом. Вызывается автоматически при уничтожении.
- 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¶
Отображает
image, чей левый верхний угол начинается в позиции x, y.x_scaleуправляет тем, насколько отображаемое изображение масштабируется в направлении x (число с плавающей точкой). Если это значение отрицательное, изображение будет отражено по горизонтали.y_scaleуправляет тем, насколько отображаемое изображение масштабируется в направлении y (число с плавающей точкой). Если это значение отрицательное, изображение будет отражено по вертикали.roi– это кортеж прямоугольника области интереса (x, y, w, h) изображения для отображения.rgb_channel– это RGB-канал (0=R, G=1, B=2) для извлечения из RGB565-изображения и отрисовки на дисплее.alphaуправляет тем, насколько непрозрачно изображение. Значение 256 отображает непрозрачное изображение, а значение меньше 256 даёт чёрное прозрачное изображение. 0 приводит к идеально чёрному изображению.color_paletteесли не-1, может быть перечислением цветовой палитры или RGB565-изображением размером в 256 пикселей, используемым как таблица соответствия цветов для значения входного изображения в оттенках серого.alpha_paletteесли не-1, может быть GRAYSCALE-изображением размером в 256 пикселей, используемым как альфа-палитра, которая модулирует значениеalphaвходного изображения на уровне отдельных пикселей.hintлогическое ИЛИ из флагов:image.AREA: Использовать площадное масштабирование при уменьшении.image.BILINEAR: Использовать билинейное масштабирование.image.BICUBIC: Использовать бикубическое масштабирование.image.CENTER: Центрировать изображение на дисплее (после масштабирования).image.HMIRROR: Отразить изображение по горизонтали.image.VFLIP: Отразить изображение по вертикали.image.TRANSPOSE: Транспонировать изображение (поменять местами x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Применить извлечениеrgb_channelперед масштабированием.image.APPLY_COLOR_PALETTE_FIRST: Применитьcolor_paletteперед масштабированием.image.SCALE_ASPECT_KEEP: Масштабировать так, чтобы вписать в дисплей.image.SCALE_ASPECT_EXPAND: Масштабировать так, чтобы заполнить дисплей (с обрезкой).image.SCALE_ASPECT_IGNORE: Масштабировать так, чтобы заполнить дисплей (с растяжением).image.ROTATE_90: Повернуть на 90 градусов (VFLIP | TRANSPOSE).image.ROTATE_180: Повернуть на 180 градусов (HMIRROR | VFLIP).image.ROTATE_270: Повернуть на 270 градусов (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Очищает экран до чёрного цвета.
display_offпринимается для совместимости API с другими классами дисплеев и игнорируется.
- ioctl(cmd: int, *args) object¶
Общая точка входа ioctl.
Передайте
display.IOCTL_CHANNELв качествеcmdдля установки или получения канала вещания беспроводного TV-шилда. Со вторым аргументом (1-8) канал устанавливается; без второго аргумента возвращается текущий канал. Ни один канал не выбран, пока не сделан первый вызов установки.