class TVDisplay -- TV Shield 驱动¶
TVDisplay 类驱动 OpenMV TV Shield,它将 RGB565 帧缓冲区转换为适用于任何电视或模拟视频监视器的 NTSC 复合视频信号(352x240,60 场/秒隔行扫描)。
支持两种 Shield 变体:
有线 TV Shield,它在单个 RCA 插孔上输出复合信号。
无线 TV Shield,它将相同的信号馈送到 2.4 GHz 模拟视频发射器。接收器通道(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,则以 3 倍于显示尺寸的 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是要从 RGB565 图像中提取并在显示器上渲染的 RGB 通道(0=R,G=1,B=2)。alpha控制图像的不透明程度。值为 256 时显示不透明图像,低于 256 的值会产生黑色透明图像。0 会得到完全黑色的图像。color_palette若不为-1,可以是一个调色板枚举,或一个总计 256 像素的 RGB565 图像,用作输入图像灰度值上的颜色查找表。alpha_palette若不为-1,可以是一个总计 256 像素的 GRAYSCALE 图像,用作 alpha 调色板,在逐像素级别上调制输入图像的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)。
- ioctl(cmd: int, *args) object¶
通用 ioctl 入口点。
传入
display.IOCTL_CHANNEL作为cmd以设置或获取无线 TV Shield 的广播通道。带第二个参数(1-8)时设置通道;不带第二个参数时返回当前通道。在首次设置调用之前不会选择任何通道。