คลาส TVDisplay -- ไดรเวอร์ TV Shield¶
คลาส TVDisplay ขับเคลื่อน OpenMV TV Shield ซึ่งแปลงบัฟเฟอร์เฟรม RGB565 เป็นสัญญาณวิดีโอคอมโพสิต NTSC (352x240, 60 fields/s แบบ interlaced) ที่เหมาะสำหรับโทรทัศน์หรือจอภาพวิดีโอแบบอนาล็อก
รองรับ shield สองรูปแบบ:
TV Shield แบบมีสาย ซึ่งเปิดเผยสัญญาณคอมโพสิตบนแจ็ค RCA เดี่ยว
Wireless TV Shield ซึ่งป้อนสัญญาณเดียวกันเข้าสู่เครื่องส่งสัญญาณวิดีโอแบบอนาล็อก 2.4 GHz ช่องรับสัญญาณ (1--8) ถูกเลือกที่รันไทม์ผ่าน
ioctl()ด้วยdisplay.IOCTL_CHANNELจนกว่าจะมีการเรียกนั้นจะไม่มีการเลือกช่อง
ความละเอียดและการกำหนดเฟรมเป็นค่าคงที่ -- TVDisplay ไม่รับอาร์กิวเมนต์ framesize เฟรมถูกนำเสนอโดยการส่ง image.Image ไปยัง write() ซึ่งจัดการการปรับขนาด ROI palette และการแปลงทิศทางภายใน
ตัวอย่างการใช้งาน:
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 เพิ่มขึ้น 3 เท่าของขนาดหน้าจอ ค่าเริ่มต้นขึ้นอยู่กับบอร์ด- 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, yx_scaleควบคุมการขยายภาพที่แสดงในทิศทาง x (float) ถ้าค่านี้เป็นลบ ภาพจะถูกกระจกในแนวนอนy_scaleควบคุมการขยายภาพที่แสดงในทิศทาง y (float) ถ้าค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้งroiคือทูเพิลสี่เหลี่ยมบริเวณที่สนใจ (ROI) (x, y, w, h) ของภาพที่จะแสดงrgb_channelคือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 และแสดงบนจอแสดงผลalphaควบคุมความทึบแสงของภาพ ค่า 256 แสดงภาพทึบแสง ในขณะที่ค่าต่ำกว่า 256 จะสร้างภาพโปร่งใสสีดำ 0 ทำให้ภาพดำสนิทcolor_paletteถ้าไม่ใช่-1สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตารางค้นหาสีบนค่าระดับสีเทาของภาพอินพุตalpha_paletteถ้าไม่ใช่-1สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่าalphaของภาพอินพุตต่อพิกเซลhintOR แบบลอจิกของแฟล็ก:image.AREA: ใช้การปรับขนาดแบบ area เมื่อลดขนาดimage.BILINEAR: ใช้การปรับขนาดแบบ bilinearimage.BICUBIC: ใช้การปรับขนาดแบบ bicubicimage.CENTER: จัดกึ่งกลางภาพบนจอแสดงผล (หลังการปรับขนาด)image.HMIRROR: กระจกภาพในแนวนอนimage.VFLIP: พลิกภาพในแนวตั้งimage.TRANSPOSE: สลับตำแหน่งภาพ (swap 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เพื่อตั้งค่าหรือรับช่องการออกอากาศของ wireless TV shield ถ้ามีอาร์กิวเมนต์ที่สอง (1-8) จะตั้งค่าช่อง ถ้าไม่มีอาร์กิวเมนต์ที่สองจะคืนค่าช่องปัจจุบัน ไม่มีการเลือกช่องจนกว่าจะมีการเรียก set ครั้งแรก