lớp TVDisplay -- Trình điều khiển TV Shield¶
Lớp TVDisplay điều khiển OpenMV TV Shield, chuyển đổi bộ đệm khung hình RGB565 thành tín hiệu video composite NTSC (352x240, 60 field/giây xen kẽ) phù hợp với bất kỳ tivi hoặc màn hình video analog nào.
Hai biến thể shield được hỗ trợ:
TV Shield có dây, cung cấp tín hiệu composite trên một jack RCA.
Wireless TV Shield, truyền tín hiệu tương tự vào bộ phát video analog 2.4 GHz. Kênh thu (1--8) được chọn lúc chạy qua
ioctl()vớidisplay.IOCTL_CHANNEL; cho đến khi thực hiện lệnh đó thì chưa chọn kênh nào.
Độ phân giải và tốc độ khung hình là cố định -- TVDisplay không nhận tham số framesize. Khung hình được trình bày bằng cách truyền image.Image vào write(), hàm này xử lý nội bộ việc chia tỷ lệ, ROI, bảng màu và các phép biến đổi hướng.
Ví dụ sử dụng:
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())
Hàm tạo¶
- class display.TVDisplay(triple_buffer: bool = True)¶
triple_bufferNếu True thì làm cho các cập nhật màn hình không bị chặn, nhưng tốn 3 lần kích thước màn hình trong RAM. Giá trị mặc định phụ thuộc vào bo mạch.- deinit() None¶
Giải phóng các chân I/O và RAM được sử dụng bởi lớp này. Được gọi tự động khi hủy đối tượng.
- 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¶
Hiển thị một
imagevới góc trên bên trái bắt đầu tại vị trí x, y.x_scalekiểm soát tỷ lệ phóng to/thu nhỏ của ảnh hiển thị theo chiều x (số thực). Nếu giá trị này âm thì ảnh sẽ bị lật ngang.y_scalekiểm soát tỷ lệ phóng to/thu nhỏ của ảnh hiển thị theo chiều y (số thực). Nếu giá trị này âm thì ảnh sẽ bị lật dọc.roilà bộ hình chữ nhật vùng quan tâm (ROI) (x, y, w, h) của ảnh cần hiển thị.rgb_channellà kênh RGB (0=R, G=1, B=2) cần trích xuất từ ảnh RGB565 và hiển thị.alphakiểm soát độ mờ đục của ảnh. Giá trị 256 hiển thị ảnh không trong suốt, giá trị dưới 256 tạo ra ảnh đen trong suốt. 0 cho ảnh hoàn toàn đen.color_palettenếu không phải-1có thể là enum bảng màu hoặc ảnh RGB565 tổng cộng 256 điểm ảnh dùng làm bảng tra cứu màu sắc cho giá trị thang xám của ảnh đầu vào.alpha_palettenếu không phải-1có thể là ảnh GRAYSCALE tổng cộng 256 điểm ảnh dùng làm bảng alpha điều biến giá trịalphacủa ảnh đầu vào theo từng điểm ảnh.hintlà phép OR logic của các cờ:image.AREA: Dùng tỷ lệ diện tích khi thu nhỏ.image.BILINEAR: Dùng tỷ lệ song tuyến.image.BICUBIC: Dùng tỷ lệ lưỡng khối.image.CENTER: Căn giữa ảnh trên màn hình (sau khi chia tỷ lệ).image.HMIRROR: Lật ngang ảnh.image.VFLIP: Lật dọc ảnh.image.TRANSPOSE: Chuyển vị ảnh (hoán đổi x/y).image.EXTRACT_RGB_CHANNEL_FIRST: Áp dụng trích xuấtrgb_channeltrước khi chia tỷ lệ.image.APPLY_COLOR_PALETTE_FIRST: Áp dụngcolor_palettetrước khi chia tỷ lệ.image.SCALE_ASPECT_KEEP: Chia tỷ lệ vừa khít trong màn hình.image.SCALE_ASPECT_EXPAND: Chia tỷ lệ lấp đầy màn hình (cắt xén).image.SCALE_ASPECT_IGNORE: Chia tỷ lệ lấp đầy màn hình (kéo dãn).image.ROTATE_90: Xoay 90 độ (VFLIP | TRANSPOSE).image.ROTATE_180: Xoay 180 độ (HMIRROR | VFLIP).image.ROTATE_270: Xoay 270 độ (HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
Xóa màn hình về màu đen.
display_offđược chấp nhận để tương thích API với các lớp màn hình khác và bị bỏ qua.
- ioctl(cmd: int, *args) object¶
Điểm vào ioctl chung.
Truyền
display.IOCTL_CHANNELlàmcmdđể đặt hoặc lấy kênh phát sóng của wireless TV shield. Với tham số thứ hai (1-8) thì kênh được đặt; không có tham số thứ hai thì trả về kênh hiện tại. Chưa có kênh nào được chọn cho đến khi thực hiện lệnh đặt đầu tiên.