คลาส Image -- วัตถุภาพ

Image เป็นชนิดข้อมูลหลักของโมดูล image ซึ่งเป็นบัฟเฟอร์พิกเซลในหน่วยความจำที่ทุกฟังก์ชันวาด ทุกฟิลเตอร์ ทุกการแปลงทางเรขาคณิต และทุกฟังก์ชันดึงคุณลักษณะใช้งาน ทุกเฟรมที่ออกมาจาก csi.CSI.snapshot() จะเป็น Image เช่นเดียวกับทุกเฟรมที่โหลดจากดิสก์ ถอดรหัสจาก JPEG หรือ PNG จัดสรรจาก ndarray แบบ numpy หรือสร้างเป็นพื้นผิววาดที่ว่างเปล่า

Image ถูกอธิบายด้วยตัวเลขสามค่า ได้แก่ width, height, และ pixformat รวมกับบัฟเฟอร์พิกเซลต่อเนื่อง รูปแบบพิกเซลกำหนดทั้งโครงสร้างในหน่วยความจำและการดำเนินการที่ใช้งานได้:

  • BINARY (1 bpp) -- 1 บิตต่อพิกเซล ใช้สำหรับมอร์โฟโลยีและการกำหนดค่าขีดแบ่ง

  • GRAYSCALE (8 bpp) -- 1 ไบต์ต่อพิกเซล รูปแบบมาตรฐานสำหรับงาน CV ส่วนใหญ่ (AprilTag, ขอบ, ORB, optical flow)

  • RGB565 (16 bpp) -- 2 ไบต์ต่อพิกเซล (5R/6G/5B) รูปแบบสีเริ่มต้น

  • BAYER (8 bpp) -- ข้อมูล Bayer-mosaic ดิบที่ได้จากเซ็นเซอร์โดยตรง วิธี CV ส่วนใหญ่ไม่รองรับภาพ Bayer ต้องแปลงเป็น GRAYSCALE / RGB565 ก่อน

  • YUV422 (16 bpp) -- สีแบบ chroma-subsampled 4:2:2 สองไบต์ต่อพิกเซล มีเพียงบางวิธีเท่านั้นที่ทำงานโดยตรงบน YUV422

  • JPEG / PNG -- บัฟเฟอร์ที่บีบอัดแล้ว การดำเนินการระดับพิกเซลต้องใช้ to_grayscale() หรือ to_rgb565() ก่อน

แหล่งที่มาของวัตถุ Image

มีสี่วิธีในการได้รับ Image:

  • จากบัฟเฟอร์เฟรมของกล้อง -- csi.CSI().snapshot() คืนค่าเฟรมที่จับภาพถัดไป วัตถุที่คืนค่าเป็น wrapper บางๆ รอบหน่วยความจำบัฟเฟอร์เฟรมของกล้อง ดังนั้นการดำเนินการวาด/ฟิลเตอร์ใดๆ บนวัตถุนี้จะเปลี่ยนสิ่งที่ส่งไปยัง IDE preview และจอแสดงผล

  • จากไฟล์ -- ส่งสตริงเส้นทางไปยังตัวสร้าง Image BMP, PGM, PPM, JPEG และ PNG จะถูกถอดรหัสโดยตรงเข้า RAM (หรือเข้าบัฟเฟอร์เฟรมของกล้องหาก copy_to_fb=True)

  • จาก ndarray -- ส่งอาร์เรย์ float32 รูปแบบ (h, w) หรือ (h, w, 3) พิกเซลจะถูก scale จาก 0.0 -- 255.0 เป็น GRAYSCALE หรือ RGB565 ตามลำดับ

  • ว่างเปล่า -- ส่ง (width, height, pixformat) เพื่อจัดสรรพื้นผิววาดที่เติมด้วยศูนย์ สำหรับรูปแบบพิกเซลที่บีบอัด (JPEG / PNG) จำเป็นต้องมีอาร์กิวเมนต์ buffer= และเก็บกระแสไบต์ที่บีบอัด

ลูปทั่วไปสำหรับจับภาพ-ประมวลผล-แสดงผล

import csi
import image

sensor = csi.CSI()
sensor.reset()
sensor.pixformat(csi.RGB565)
sensor.framesize(csi.QVGA)

while True:
    img = sensor.snapshot()                    # capture
    for blob in img.find_blobs([(30, 100, 15, 127, 15, 127)]):  # process
        img.draw_rectangle(blob.rect)          # annotate
    # img is shown automatically in the IDE preview and on any
    # attached display.

การจัดทำดัชนี ความยาว การวนซ้ำ และการเข้าถึงแบบ bytes

  • การจัดทำดัชนี -- img[i] อ่านพิกเซล i (เรียงตามแถว) img[i] = value เขียนค่า พิกเซล Grayscale/Bayer เป็นจำนวนเต็ม 8 บิต พิกเซล RGB565/YUV422 เป็นจำนวนเต็ม 16 บิตแบบ packed พิกเซลไบนารีเป็น 0 / 1 สำหรับภาพ JPEG/PNG พื้นที่ดัชนีเป็นกระแสไบต์ที่บีบอัด ไม่ใช่พิกเซล

  • ความยาว -- len(img) คืนค่าจำนวนพิกเซลสำหรับรูปแบบที่ไม่ได้บีบอัด หรือจำนวนไบต์สำหรับรูปแบบที่บีบอัด

  • การวนซ้ำ -- for px in img: ... เดินผ่านอาร์เรย์พิกเซลในลำดับเดียวกับการจัดทำดัชนีด้วย []

  • แบบ Bytes -- Image เปิดเผย read buffer protocol ดังนั้นคุณสามารถส่งผ่านไปยังสิ่งใดก็ตามที่รับ bytes / bytearray ได้โดยตรง (เช่น uart.write(img), socket.send(img), hashlib.sha256(img)) ใช้ bytearray() แทนเพื่อรับ read/write view

แฟล็ก hint

เมธอด Image หลายเมธอดรับอาร์กิวเมนต์ hint ซึ่งเป็น OR ตรรกะของแฟล็กต่อไปนี้:

  • image.AREA: ใช้การ scale แบบ area เมื่อย่อขนาด แทนค่าเริ่มต้นแบบ nearest neighbor

  • image.BILINEAR: ใช้การ scale แบบ bilinear แทนค่าเริ่มต้นแบบ nearest neighbor

  • image.BICUBIC: ใช้การ scale แบบ bicubic แทนค่าเริ่มต้นแบบ nearest neighbor

  • image.CENTER: จัดภาพที่วาดให้อยู่กึ่งกลางบนจอแสดงผล ใช้หลังจาก scale แล้ว

  • image.HMIRROR: สะท้อนภาพในแนวนอน

  • image.VFLIP: พลิกภาพในแนวตั้ง

  • image.TRANSPOSE: สลับตำแหน่งภาพ (สลับ x/y)

  • image.EXTRACT_RGB_CHANNEL_FIRST: ดึงช่อง RGB ก่อน scale

  • image.APPLY_COLOR_PALETTE_FIRST: ใช้ color palette ก่อน scale

  • image.SCALE_ASPECT_KEEP: Scale ภาพที่วาดให้พอดีกับจอแสดงผล

  • image.SCALE_ASPECT_EXPAND: Scale ภาพที่วาดให้เต็มจอแสดงผล (จะมีการตัดส่วนเกิน)

  • image.SCALE_ASPECT_IGNORE: Scale ภาพที่วาดให้เต็มจอแสดงผล (จะมีการยืด)

  • image.ROTATE_90: หมุนภาพ 90 องศา (เทียบเท่า VFLIP | TRANSPOSE)

  • image.ROTATE_180: หมุนภาพ 180 องศา (เทียบเท่า HMIRROR | VFLIP)

  • image.ROTATE_270: หมุนภาพ 270 องศา (เทียบเท่า HMIRROR | TRANSPOSE)

  • image.BLACK_BACKGROUND: สมมติว่าพื้นหลังภาพที่วาดเป็นสีดำเพื่อเร่งการผสม รองรับเฉพาะ Image.draw_image() และ Image.get_similarity()

class image.Image(arg: str | int | ndarray, height: int = -1, pixformat: int = -1, *, buffer: bytes | bytearray | memoryview | None = None, copy_to_fb: bool = False)

หาก arg เป็นสตริง จะสร้างวัตถุภาพใหม่จากไฟล์ที่เส้นทาง arg รองรับการโหลดไฟล์ภาพ bmp/pgm/ppm/jpg/jpeg/png จากดิสก์ หาก copy_to_fb เป็น True ภาพจะถูกคัดลอกไปยังบัฟเฟอร์เฟรมแทนการจัดสรรบน heap

หาก arg เป็น ndarray จะสร้างวัตถุภาพใหม่จาก ndarray นั้น วัตถุ ndarray ที่มี shape เป็น (w, h) จะถูกถือว่าเป็นภาพระดับสีเทา ส่วน (w, h, 3) ถือเป็นภาพ RGB565 รองรับเฉพาะ ndarrays แบบ float32 ในขณะนี้ เมื่อสร้างภาพด้วยวิธีนี้หากส่งอาร์กิวเมนต์ buffer จะใช้เก็บข้อมูลภาพแทนการจัดสรรพื้นที่บน heap หาก copy_to_fb เป็น True ภาพจะถูกคัดลอกไปยังบัฟเฟอร์เฟรมแทนการจัดสรรบน heap หรือใช้ buffer

หาก arg เป็น int จะถือว่าเป็นความกว้างของภาพใหม่ และต้องตามด้วยค่า height และ format เพื่อสร้างวัตถุภาพว่างใหม่ format สามารถเป็นค่า pixformat ของภาพใดก็ได้ เช่น image.GRAYSCALE ภาพจะถูกเริ่มต้นเป็นศูนย์ทั้งหมด โปรดทราบว่าต้องมีค่า buffer สำหรับรูปแบบภาพที่บีบอัด buffer ถือเป็นแหล่งข้อมูลภาพสำหรับการสร้างภาพด้วยวิธีนี้ หากใช้กับ copy_to_fb ข้อมูลจาก buffer จะถูกคัดลอกไปยังบัฟเฟอร์เฟรม หากต้องการสร้างภาพ JPEG จากวัตถุ JPEG bytes() หรือ bytearray() คุณสามารถส่ง width, height, image.JPEG สำหรับ JPEG พร้อมกับตั้งค่า buffer เป็นกระแสไบต์ JPEG เพื่อสร้างภาพ JPEG

ภาพรองรับสัญลักษณ์ "[]" ใช้ image[index] = 8/16-bit value เพื่อกำหนดค่าพิกเซลหรือ image[index] เพื่อรับค่าพิกเซลซึ่งจะเป็นค่า 8 บิตสำหรับภาพ grayscale/bayer หรือค่า 16 บิตสำหรับภาพ RGB565/YUV ภาพไบนารีคืนค่า 1 บิต

สำหรับภาพ JPEG สัญลักษณ์ "[]" ให้คุณเข้าถึง blob ภาพ JPEG ที่บีบอัดแล้วเป็นอาร์เรย์ไบต์ อย่างไรก็ตาม การอ่านและเขียนอาร์เรย์ข้อมูลจะไม่โปร่งใสเนื่องจากภาพ JPEG เป็นกระแสไบต์ที่บีบอัด

ภาพยังรองรับการดำเนินการ read buffer ด้วย คุณสามารถส่งภาพไปยังฟังก์ชัน MicroPython ต่างๆ ราวกับว่าภาพเป็นวัตถุ byte-array โดยเฉพาะอย่างยิ่ง หากต้องการส่งภาพ คุณสามารถส่งผ่านไปยังฟังก์ชันเขียน UART/SPI/I2C เพื่อส่งโดยอัตโนมัติ

เมธอดพื้นฐาน

width() int

คืนค่าความกว้างของภาพเป็นพิกเซล

height() int

คืนค่าความสูงของภาพเป็นพิกเซล

format() int

คืนค่า image.GRAYSCALE สำหรับภาพระดับสีเทา, image.RGB565 สำหรับภาพ RGB565, image.BAYER สำหรับภาพแบบ bayer pattern และ image.JPEG สำหรับภาพ JPEG

size() int

คืนค่าขนาดภาพเป็นไบต์

bytearray() bytearray

คืนค่าวัตถุ bytearray ที่ชี้ไปยังข้อมูลภาพสำหรับการเข้าถึงอ่าน/เขียนระดับไบต์

Note

วัตถุภาพจะถูก cast อัตโนมัติเป็นวัตถุ bytes เมื่อส่งไปยังไดรเวอร์ MicroPython ที่ต้องการวัตถุแบบ bytes นี่เป็นการเข้าถึงแบบอ่านอย่างเดียว เรียก bytearray() เพื่อรับการเข้าถึงอ่าน/เขียน

get_pixel(x: int, y: int, rgbtuple: bool | None = None) int | Tuple[int, int, int]

สำหรับภาพระดับสีเทา: คืนค่าพิกเซลระดับสีเทาที่ตำแหน่ง (x, y) สำหรับภาพ RGB565: คืนค่า tuple RGB888 (r, g, b) ที่ตำแหน่ง (x, y) สำหรับภาพ bayer pattern: คืนค่าพิกเซลที่ตำแหน่ง (x, y)

คืนค่า None หาก x หรือ y อยู่นอกภาพ

x และ y อาจส่งแยกกันหรือเป็น tuple ก็ได้

rgbtuple หากเป็น True ทำให้เมธอดนี้คืนค่า tuple RGB888 มิฉะนั้นเมธอดนี้จะคืนค่าเต็มของพิกเซลพื้นฐาน เช่น สำหรับภาพ RGB565 เมธอดนี้จะคืนค่า RGB565 ค่าเริ่มต้นเป็น True สำหรับภาพ RGB565 และ False สำหรับกรณีอื่น

ไม่รองรับภาพที่บีบอัด

Note

Image.get_pixel() และ Image.set_pixel() เป็นเมธอดเดียวที่ให้คุณจัดการภาพ bayer pattern ได้ ภาพ bayer pattern เป็นภาพจริงที่พิกเซลในภาพเป็น R/G/R/G/ฯลฯ สำหรับแถวคู่ และ G/B/G/B/ฯลฯ สำหรับแถวคี่ แต่ละพิกเซลเป็น 8 บิต หากเรียกเมธอดนี้โดยตั้ง rgbtuple Image.get_pixel() จะ debayer ภาพต้นฉบับที่ตำแหน่งพิกเซลนั้นและคืนค่า tuple RGB888 ที่ถูกต้องสำหรับตำแหน่งพิกเซลนั้น

set_pixel(x: int, y: int, pixel: int | Tuple[int, int, int]) Image

สำหรับภาพระดับสีเทา: ตั้งค่าพิกเซลที่ตำแหน่ง (x, y) เป็นค่าระดับสีเทา pixel สำหรับภาพ RGB565: ตั้งค่าพิกเซลที่ตำแหน่ง (x, y) เป็น tuple RGB888 (r, g, b) pixel สำหรับภาพ bayer pattern: ตั้งค่าพิกเซลที่ตำแหน่ง (x, y) เป็นค่า pixel

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

x และ y อาจส่งแยกกันหรือเป็น tuple ก็ได้

pixel อาจเป็น tuple RGB888 (r, g, b) หรือค่าพิกเซลพื้นฐาน (เช่น ค่า RGB565 สำหรับภาพ RGB565 หรือค่า 8 บิตสำหรับภาพระดับสีเทา)

ไม่รองรับภาพที่บีบอัด

Note

Image.get_pixel() และ Image.set_pixel() เป็นเมธอดเดียวที่ให้คุณจัดการภาพ bayer pattern ได้ ภาพ bayer pattern เป็นภาพจริงที่พิกเซลในภาพเป็น R/G/R/G/ฯลฯ สำหรับแถวคู่ และ G/B/G/B/ฯลฯ สำหรับแถวคี่ แต่ละพิกเซลเป็น 8 บิต หากเรียกเมธอดนี้ด้วย tuple RGB888 ค่าระดับสีเทาของ tuple RGB888 นั้นจะถูกดึงออกมาและกำหนดให้กับตำแหน่งพิกเซล

เมธอดการแปลง

to_ndarray(dtype: str, buffer: bytes | bytearray | memoryview | None = None) ndarray

คืนค่าวัตถุ ndarray ที่สร้างจากภาพ ใช้งานได้เฉพาะภาพ GRAYSCALE หรือ RGB565 ในขณะนี้

dtype สามารถเป็น b, B, หรือ f สำหรับสร้าง ndarray แบบ signed 8-bit, unsigned 8-bit, หรือ floating point 32-bit ภาพ GRAYSCALE จะถูกแปลงโดยตรงเป็นวัตถุ ndarray แบบ unsigned 8-bit สำหรับ ndarray แบบ signed 8-bit ค่า (0:255) จะถูก map เป็น (-127:128) สำหรับ ndarray แบบ float 32-bit ค่าจะถูก map เป็น (0.0:255.0) ภาพ RGB565 จะถูกแปลงเป็นวัตถุ ndarray แบบ 3 ช่องและกระบวนการเดียวกับที่อธิบายข้างต้นสำหรับภาพ GRAYSCALE จะถูกนำไปใช้กับแต่ละช่องขึ้นอยู่กับ dtype โปรดทราบว่า dtype ยังรับค่าจำนวนเต็ม (เช่น ord()) ของ b, B, และ f ตามลำดับ

buffer หากไม่ใช่ None จะเป็นวัตถุ bytearray ที่ใช้เป็นบัฟเฟอร์สำหรับ ndarray หาก None จะจัดสรรบัฟเฟอร์ใหม่บน heap เพื่อเก็บข้อมูลภาพ ndarray คุณสามารถใช้อาร์กิวเมนต์ buffer เพื่อจัดสรร ndarray โดยตรงในบัฟเฟอร์ที่จัดสรรไว้ล่วงหน้า ช่วยประหยัดการจัดสรร heap และการดำเนินการคัดลอก

ndarray ที่คืนค่ามี shape เป็น (height, width) สำหรับภาพ GRAYSCALE และ (height, width, 3) สำหรับภาพ RGB565

to_bitmap(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: int | Image | None = None, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False) Image

แปลงภาพเป็นภาพ bitmap (1 บิตต่อพิกเซล)

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

Note

ภาพ bitmap เหมือนภาพระดับสีเทาแต่มีเพียงสองค่าพิกเซล คือ 0 และ 1 นอกจากนี้ ภาพ bitmap ถูก pack เพื่อเก็บเพียง 1 บิตต่อพิกเซล ทำให้มีขนาดเล็กมาก ไลบรารีภาพ OpenMV ให้ใช้ภาพ bitmap ในทุกที่ที่ใช้ภาพ sensor.GRAYSCALE และ sensor.RGB565 ได้ อย่างไรก็ตาม การดำเนินการหลายอย่างเมื่อใช้กับภาพ bitmap ไม่สมเหตุสมผลเนื่องจากภาพ bitmap มีเพียง 2 ค่า OpenMV แนะนำให้ใช้ภาพ bitmap สำหรับค่า mask ในการดำเนินการต่างๆ เนื่องจากพอดีกับ MicroPython heap อย่างง่ายดาย สุดท้าย ค่าพิกเซล bitmap 0 และ 1 จะถูกตีความเป็นสีดำและสีขาวเมื่อใช้กับภาพ sensor.GRAYSCALE หรือ sensor.RGB565 ไลบรารีจะจัดการการแปลงโดยอัตโนมัติ

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

to_grayscale(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: int | Image | None = None, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False) Image

แปลงภาพเป็นภาพระดับสีเทา (8 บิตต่อพิกเซล)

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

to_rgb565(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: int | Image | None = None, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False) Image

แปลงภาพเป็นภาพ RGB565 (16 บิตต่อพิกเซล)

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

to_rainbow(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: int | Image = PALETTE_RAINBOW, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False) Image

แปลงภาพเป็นภาพ rainbow RGB565 (16 บิตต่อพิกเซล)

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

to_ironbow(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: int | Image = PALETTE_IRONBOW, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False) Image

แปลงภาพเป็นภาพ ironbow RGB565 (16 บิตต่อพิกเซล)

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

to_depth(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: int | Image = PALETTE_IRONBOW, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False) Image

แปลงภาพเป็นภาพ Depth RGB565 (16 บิตต่อพิกเซล)

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น image.PALETTE_DEPTH หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

to_evt_dark(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: int | Image = PALETTE_IRONBOW, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False) Image

แปลงภาพเป็นภาพ Dark Event RGB565 (16 บิตต่อพิกเซล)

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

to_evt_light(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: int | Image = PALETTE_IRONBOW, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False) Image

แปลงภาพเป็นภาพ Light Event RGB565 (16 บิตต่อพิกเซล)

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

to_jpeg(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: int | Image | None = None, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False, quality: int = 90, subsampling: int = 0) Image

แปลงภาพเป็นภาพ JPEG

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

quality ควบคุมคุณภาพการบีบอัด jpeg ค่าสามารถอยู่ระหว่าง 0 ถึง 100

subsampling สามารถเป็น:

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

to_png(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: int | Image | None = None, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False) Image

แปลงภาพเป็นภาพ PNG

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

compress(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: int | Image | None = None, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False, quality: int = 90, subsampling: int = 0) Image

แปลงภาพเป็นภาพ JPEG

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

quality ควบคุมคุณภาพการบีบอัด jpeg ค่าสามารถอยู่ระหว่าง 0 ถึง 100

subsampling สามารถเป็น:

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

Note

Image.compress เป็น alias สำหรับ Image.to_jpeg

copy(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: int | Image | None = None, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy_to_fb: bool = False) Image

สร้าง deep copy ของวัตถุภาพ

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

crop(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: int | Image | None = None, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False) Image

ปรับแต่งภาพ in-place โดยไม่เปลี่ยนชนิดภาพพื้นฐาน

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

scale(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: int | Image | None = None, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, copy: bool = False, copy_to_fb: bool = False) Image

ปรับแต่งภาพ in-place โดยไม่เปลี่ยนชนิดภาพพื้นฐาน

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (ยกเว้น image.BLACK_BACKGROUND ซึ่งไม่รองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

copy หากเป็น True สร้าง deep-copy บน heap ของภาพที่แปลงแล้ว แทนการแปลงภาพต้นฉบับ in-place

copy_to_fb หากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรม copy_to_fb มีความสำคัญกว่า copy ไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้ว

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

Note

Image.scale เป็น alias สำหรับ Image.crop

save(path: str, roi: Tuple[int, int, int, int] | None = None, quality: int = 50) Image

บันทึกสำเนาภาพไปยังระบบไฟล์ที่ path

รองรับไฟล์ภาพ bmp/pgm/ppm/jpg/jpeg โปรดทราบว่าไม่สามารถบันทึกภาพที่บีบอัด jpeg ไปยังรูปแบบที่ไม่ได้บีบอัดได้

roi เป็นสี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ที่จะบันทึก หากไม่ระบุ จะเท่ากับสี่เหลี่ยมภาพซึ่งคัดลอกภาพทั้งหมด อาร์กิวเมนต์นี้ใช้ไม่ได้กับภาพ JPEG

quality คือคุณภาพการบีบอัด jpeg ที่ใช้บันทึกภาพเป็นรูปแบบ jpeg หากภาพยังไม่ได้บีบอัด (0-100) (int)

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

flush() None

อัปเดตบัฟเฟอร์เฟรมใน IDE ด้วยภาพในบัฟเฟอร์เฟรมบนกล้อง

เมธอดการวาด

clear(mask: Image | None = None) Image

ตั้งค่าพิกเซลทั้งหมดในภาพเป็นศูนย์ (เร็วมาก)

mask คือภาพอื่นที่ใช้เป็น mask ระดับพิกเซลสำหรับการดำเนินการ mask ควรเป็นภาพที่มีเพียงพิกเซลดำหรือขาวและควรมีขนาดเดียวกับภาพที่ถูกดำเนินการ เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัด

draw_line(x0: int, y0: int, x1: int, y1: int, color: int | Tuple[int, int, int] | None = None, thickness: int = 1) Image

วาดเส้นจาก (x0, y0) ถึง (x1, y1) บนภาพ คุณสามารถส่ง x0, y0, x1, y1 แยกกันหรือเป็น tuple (x0, y0, x1, y1) ก็ได้

color เป็น tuple RGB888 สำหรับภาพ Grayscale หรือ RGB565 ค่าเริ่มต้นเป็นสีขาว อย่างไรก็ตาม คุณยังสามารถส่งค่าพิกเซลพื้นฐาน (0-255) สำหรับภาพระดับสีเทาหรือค่า RGB565 สำหรับภาพ RGB565

thickness ควบคุมความหนาของเส้นเป็นพิกเซล

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

draw_rectangle(x: int, y: int, w: int, h: int, color: int | Tuple[int, int, int] | None = None, thickness: int = 1, fill: bool = False) Image

วาดสี่เหลี่ยมบนภาพ คุณสามารถส่ง x, y, w, h แยกกันหรือเป็น tuple (x, y, w, h) ก็ได้

color เป็น tuple RGB888 สำหรับภาพ Grayscale หรือ RGB565 ค่าเริ่มต้นเป็นสีขาว อย่างไรก็ตาม คุณยังสามารถส่งค่าพิกเซลพื้นฐาน (0-255) สำหรับภาพระดับสีเทาหรือค่า RGB565 สำหรับภาพ RGB565

thickness ควบคุมความหนาของเส้นเป็นพิกเซล

ส่ง fill เป็น True เพื่อเติมสี่เหลี่ยม

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

draw_circle(x: int, y: int, radius: int, color: int | Tuple[int, int, int] | None = None, thickness: int = 1, fill: bool = False) Image

วาดวงกลมบนภาพ คุณสามารถส่ง x, y, radius แยกกันหรือเป็น tuple (x, y, radius) ก็ได้

color เป็น tuple RGB888 สำหรับภาพ Grayscale หรือ RGB565 ค่าเริ่มต้นเป็นสีขาว อย่างไรก็ตาม คุณยังสามารถส่งค่าพิกเซลพื้นฐาน (0-255) สำหรับภาพระดับสีเทาหรือค่า RGB565 สำหรับภาพ RGB565

thickness ควบคุมความหนาของขอบเป็นพิกเซล

ส่ง fill เป็น True เพื่อเติมวงกลม

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

draw_ellipse(cx: int, cy: int, rx: int, ry: int, rotation: int, color: int | Tuple[int, int, int] | None = None, thickness: int = 1, fill: bool = False) Image

วาดวงรีบนภาพ คุณสามารถส่ง cx, cy, rx, ry และการหมุน (เป็นองศา) แยกกันหรือเป็น tuple (cx, yc, rx, ry, rotation) ก็ได้

color เป็น tuple RGB888 สำหรับภาพ Grayscale หรือ RGB565 ค่าเริ่มต้นเป็นสีขาว อย่างไรก็ตาม คุณยังสามารถส่งค่าพิกเซลพื้นฐาน (0-255) สำหรับภาพระดับสีเทาหรือค่า RGB565 สำหรับภาพ RGB565

thickness ควบคุมความหนาของขอบเป็นพิกเซล

ส่ง fill เป็น True เพื่อเติมวงรี

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

draw_string(x: int, y: int, text: str, color: int | Tuple[int, int, int] | None = None, scale: float = 1, x_spacing: int = 0, y_spacing: int = 0, mono_space: bool = True, char_rotation: int = 0, char_hmirror: bool = False, char_vflip: bool = False, string_rotation: int = 0, string_hmirror: bool = False, string_vflip: bool = False) Image

วาดข้อความ 8x10 เริ่มที่ตำแหน่ง (x, y) บนภาพ คุณสามารถส่ง x, y แยกกันหรือเป็น tuple (x, y) ก็ได้

text เป็นสตริงที่จะเขียนลงในภาพ \n, \r, และ \r\n ย้ายเคอร์เซอร์ไปยังบรรทัดถัดไป

color เป็น tuple RGB888 สำหรับภาพ Grayscale หรือ RGB565 ค่าเริ่มต้นเป็นสีขาว อย่างไรก็ตาม คุณยังสามารถส่งค่าพิกเซลพื้นฐาน (0-255) สำหรับภาพระดับสีเทาหรือค่า RGB565 สำหรับภาพ RGB565

scale อาจเพิ่มขึ้นเพื่อเพิ่ม/ลดขนาดข้อความบนภาพ คุณสามารถส่งค่า integer หรือ floating point ที่มากกว่า 0

x_spacing ให้คุณเพิ่ม (ถ้าเป็นบวก) หรือลด (ถ้าเป็นลบ) พิกเซล x ระหว่างตัวอักษร

y_spacing ให้คุณเพิ่ม (ถ้าเป็นบวก) หรือลด (ถ้าเป็นลบ) พิกเซล y ระหว่างตัวอักษร (สำหรับข้อความหลายบรรทัด)

mono_space ค่าเริ่มต้นเป็น True ซึ่งบังคับให้ข้อความมีระยะห่างคงที่ สำหรับขนาดข้อความใหญ่ดูน่าเกลียดมาก ตั้งค่าเป็น False เพื่อรับระยะห่างตัวอักษรแบบไม่คงที่ซึ่งดูดีกว่ามาก

char_rotation อาจเป็น 0, 90, 180, 270 เพื่อหมุนแต่ละตัวอักษรในสตริงตามปริมาณนั้น

char_hmirror หากเป็น True สะท้อนตัวอักษรทั้งหมดในสตริงในแนวนอน

char_vflip หากเป็น True พลิกตัวอักษรทั้งหมดในสตริงในแนวตั้ง

string_rotation อาจเป็น 0, 90, 180, 270 เพื่อหมุนสตริงตามปริมาณนั้น

string_hmirror หากเป็น True สะท้อนสตริงในแนวนอน

string_vflip หากเป็น True พลิกสตริงในแนวตั้ง

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

draw_cross(x: int, y: int, color: int | Tuple[int, int, int] | None = None, size: int = 5, thickness: int = 1) Image

วาดกากบาทที่ตำแหน่ง x, y คุณสามารถส่ง x, y แยกกันหรือเป็น tuple (x, y) ก็ได้

color เป็น tuple RGB888 สำหรับภาพ Grayscale หรือ RGB565 ค่าเริ่มต้นเป็นสีขาว อย่างไรก็ตาม คุณยังสามารถส่งค่าพิกเซลพื้นฐาน (0-255) สำหรับภาพระดับสีเทาหรือค่า RGB565 สำหรับภาพ RGB565

size ควบคุมความยาวของเส้นกากบาท

thickness ควบคุมความหนาของขอบเป็นพิกเซล

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

draw_arrow(x0: int, y0: int, x1: int, y1: int, color: int | Tuple[int, int, int] | None = None, thickness: int = 1) Image

วาดลูกศรจาก (x0, y0) ถึง (x1, y1) บนภาพ คุณสามารถส่ง x0, y0, x1, y1 แยกกันหรือเป็น tuple (x0, y0, x1, y1) ก็ได้

color เป็น tuple RGB888 สำหรับภาพ Grayscale หรือ RGB565 ค่าเริ่มต้นเป็นสีขาว อย่างไรก็ตาม คุณยังสามารถส่งค่าพิกเซลพื้นฐาน (0-255) สำหรับภาพระดับสีเทาหรือค่า RGB565 สำหรับภาพ RGB565

thickness ควบคุมความหนาของเส้นเป็นพิกเซล

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

draw_detection(detection: Tuple[int, int, int, int, int, int], color1: int | Tuple[int, int, int] | None = None, color2: int | Tuple[int, int, int] | None = None, size: int = 5, thickness: int = 1, fill: bool = False, label: str | None = None, label_offset: Tuple[int, int] | None = None) Image

วาดผลลัพธ์การตรวจจับบนภาพ detection เป็น 6-tuple (rx, ry, rw, rh, cx, cy) ที่อธิบายสี่เหลี่ยมกรอบขอบเขตและจุดศูนย์กลาง (โดยทั่วไปคืนค่าโดยโค้ด NN หรือ color tracking)

color1 คือสีสี่เหลี่ยมและ color2 คือสีกากบาทจุดศูนย์กลาง size คือขนาดกากบาทจุดศูนย์กลาง thickness ควบคุมความกว้างโครงร่าง และ fill เติมสี่เหลี่ยม

label หากระบุ จะถูกวาดใกล้กับสี่เหลี่ยม โดยเลื่อนตาม label_offset (x, y)

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

draw_edges(corners: List[Tuple[int, int]], color: int | Tuple[int, int, int] | None = None, size: int = 0, thickness: int = 1, fill: bool = False) Image

วาดขอบเส้นระหว่างรายการมุมที่คืนค่าโดยเมธอดเช่น blob.corners corners เป็น tuple สี่ค่าของ tuple x/y สองค่า เช่น [(x1,y1),(x2,y2),(x3,y3),(x4,y4)]

color เป็น tuple RGB888 สำหรับภาพ Grayscale หรือ RGB565 ค่าเริ่มต้นเป็นสีขาว อย่างไรก็ตาม คุณยังสามารถส่งค่าพิกเซลพื้นฐาน (0-255) สำหรับภาพระดับสีเทาหรือค่า RGB565 สำหรับภาพ RGB565

size หากมากกว่า 0 ทำให้มุมถูกวาดเป็นวงกลมรัศมี size

thickness ควบคุมความหนาของเส้นเป็นพิกเซล

ส่ง fill เป็น True เพื่อเติมวงกลมมุมหากวาด

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

draw_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: int | Image | None = None, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, mask: Image | None = None) Image

วาด image ที่มุมซ้ายบนเริ่มที่ตำแหน่ง x, y คุณสามารถส่ง x, y แยกกันหรือเป็น tuple (x, y) ก็ได้ เมธอดนี้จัดการการแสดงผลภาพที่ส่งเข้ามาให้เป็นรูปแบบพิกเซลที่ถูกต้องสำหรับภาพปลายทางโดยอัตโนมัติ พร้อมทั้งจัดการการตัดขอบอย่างราบรื่น

คุณยังสามารถส่งเส้นทางแทนวัตถุภาพสำหรับเมธอดนี้เพื่อโหลดภาพจากดิสก์โดยอัตโนมัติและใช้งานในขั้นตอนเดียว เช่น draw_image("test.jpg")

x_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง x (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวนอน โปรดทราบว่าหาก y_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

y_scale ควบคุมการ scale ภาพที่แสดงในทิศทาง y (float) หากค่านี้เป็นลบ ภาพจะถูกพลิกในแนวตั้ง โปรดทราบว่าหาก x_scale ไม่ได้ระบุ จะจับคู่กับ x_scale เพื่อรักษาอัตราส่วน

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ของภาพต้นฉบับที่จะวาด ช่วยให้คุณดึงเฉพาะพิกเซลใน ROI เพื่อ scale และวาดบนภาพปลายทาง

rgb_channel คือช่อง RGB (0=R, G=1, B=2) ที่จะดึงจากภาพ RGB565 (หากส่งมา) และแสดงบนภาพปลายทาง ตัวอย่างเช่น หากส่ง rgb_channel=1 จะดึงช่องสีเขียวของภาพ RGB565 ต้นฉบับและวาดเป็นระดับสีเทาบนภาพปลายทาง

alpha ควบคุมปริมาณการผสมภาพต้นฉบับเข้ากับภาพปลายทาง ค่า 255 วาดภาพต้นฉบับแบบทึบแสง ส่วนค่าต่ำกว่า 255 ทำให้เกิดการผสมระหว่างภาพต้นฉบับและปลายทาง 0 ไม่ทำการแก้ไขภาพปลายทาง

color_palette หากไม่ใช่ None สามารถเป็น enum ของ color palette หรือภาพ RGB565 รวม 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

alpha_palette หากไม่ใช่ None สามารถเป็นภาพ GRAYSCALE รวม 256 พิกเซลที่ใช้เป็น alpha palette ซึ่งปรับค่า alpha ของภาพต้นฉบับที่วาดในระดับพิกเซล ช่วยให้ควบคุมค่า alpha ของพิกเซลตามค่าระดับสีเทาได้อย่างแม่นยำ ค่าพิกเซล 255 ใน alpha lookup table เป็นทึบแสง ส่วนค่าต่ำกว่า 255 จะโปร่งใสมากขึ้นจนถึง 0 ใช้หลังจากดึง rgb_channel แล้วหากมีการใช้

hint เป็น OR ตรรกะของแฟล็กที่แสดงใน Hint flags (รวมถึง image.BLACK_BACKGROUND ซึ่งรองรับที่นี่)

transform เป็น ndarray ขนาด 3x3 ที่ใช้ทำ perspective transformation บนภาพ รองรับเฉพาะ OpenMV Cam N6 ในขณะนี้เนื่องจากมี GPU ที่สามารถทำได้ด้วยฮาร์ดแวร์

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

draw_keypoints(keypoints: kp_desc | List[Tuple[int, int, int]], color: int | Tuple[int, int, int] | None = None, size: int = 10, thickness: int = 1, fill: bool = False) Image

วาดจุดสำคัญของวัตถุ keypoints บนภาพ คุณยังสามารถส่งรายการ tuple สามค่าที่มี (x, y, rotation_angle_in_degrees) เพื่อใช้เมธอดนี้ซ้ำสำหรับวาดสัญลักษณ์ keypoint ซึ่งเป็นวงกลมที่มีเส้นชี้ในทิศทางหนึ่ง

color เป็น tuple RGB888 สำหรับภาพ Grayscale หรือ RGB565 ค่าเริ่มต้นเป็นสีขาว อย่างไรก็ตาม คุณยังสามารถส่งค่าพิกเซลพื้นฐาน (0-255) สำหรับภาพระดับสีเทาหรือค่า RGB565 สำหรับภาพ RGB565

size ควบคุมขนาดของ keypoints

thickness ควบคุมความหนาของเส้นเป็นพิกเซล

ส่ง fill เป็น True เพื่อเติม keypoints

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

flood_fill(x: int, y: int, seed_threshold: float = 0.05, floating_threshold: float = 0.05, color: int | Tuple[int, int, int] | None = None, invert: bool = False, clear_background: bool = False, mask: Image | None = None) Image

เติมพื้นที่ภาพโดยเริ่มจากตำแหน่ง x, y คุณสามารถส่ง x, y แยกกันหรือเป็น tuple (x, y) ก็ได้

seed_threshold ควบคุมว่าพิกเซลใดในบริเวณเติมอาจแตกต่างจากพิกเซลเริ่มต้นมากแค่ไหน

floating_threshold ควบคุมว่าพิกเซลใดในบริเวณเติมอาจแตกต่างจากพิกเซลใกล้เคียงมากแค่ไหน

color เป็น tuple RGB888 สำหรับภาพ Grayscale หรือ RGB565 ค่าเริ่มต้นเป็นสีขาว อย่างไรก็ตาม คุณยังสามารถส่งค่าพิกเซลพื้นฐาน (0-255) สำหรับภาพระดับสีเทาหรือค่า RGB565 สำหรับภาพ RGB565

ส่ง invert เป็น True เพื่อเปลี่ยนสีทุกอย่างนอกบริเวณที่เชื่อมต่อกันด้วย flood-fill

ส่ง clear_background เป็น True เพื่อตั้งค่าพิกเซลส่วนที่เหลือที่ flood-fill ไม่ได้เปลี่ยนสีเป็นศูนย์

mask คือภาพอื่นที่ใช้เป็น mask ระดับพิกเซลสำหรับการดำเนินการ mask ควรเป็นภาพที่มีเพียงพิกเซลดำหรือขาวและควรมีขนาดเดียวกับภาพที่ถูกดำเนินการ เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกประเมินขณะทำ flood fill

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

draw_event_histogram(array: ndarray, clear: bool = True, brightness: int = 128, contrast: int = 16) Image

Rasterize อาร์เรย์ event ndarray (ที่เติมโดย csi.IOCTL_GENX320_READ_EVENTS) ลงบน Image เพื่อการแสดงผล บัฟเฟอร์ภาพต้องเป็นภาพ GRAYSCALE ขนาด 320x320

สำหรับแต่ละแถว csi.PIX_ON_EVENT พิกเซลของ event จะได้รับการบวก +contrast; สำหรับแต่ละแถว csi.PIX_OFF_EVENT พิกเซลจะได้รับการลบ -contrast Trigger event จะถูกละเว้น ค่าพิกเซลถูก clamp ที่ 0-255

clear หากเป็น True จะ reset บัฟเฟอร์ภาพเป็น brightness ก่อนวาด ทุกเฟรมจะกลายเป็นการแสดงผล event ใหม่ ตั้งค่าเป็น False เพื่อสะสม event ข้ามการเรียกหลายครั้ง (มีประโยชน์สำหรับ motion trail การรับแสงนาน)

brightness ควบคุมค่าพื้นฐานกลางสีเทาที่บัฟเฟอร์ถูก reset ไปเมื่อ clear เป็น True ค่าเริ่มต้น 128 วาง ON event ที่ปลายสว่างและ OFF event ที่ปลายมืดโดยมีช่องว่างเท่ากัน

contrast ควบคุมปริมาณที่แต่ละ event เลื่อนพิกเซล ค่าสูงทำให้ event โดดเด่น แต่จะ saturate อย่างรวดเร็วเมื่อมี event จำนวนมากลงบนพิกเซลเดียวกัน

เมธอด masking

mask_rectangle(x: int, y: int, w: int, h: int) Image

ลบพื้นที่สี่เหลี่ยมของภาพออก หากไม่มีอาร์กิวเมนต์ เมธอดนี้จะลบศูนย์กลางของภาพ

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

mask_circle(x: int, y: int, radius: int) Image

ลบพื้นที่วงกลมของภาพออก หากไม่มีอาร์กิวเมนต์ เมธอดนี้จะลบศูนย์กลางของภาพ

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

mask_ellipse(x: int, y: int, radius_x: int, radius_y: int, rotation_angle_in_degrees: int) Image

ลบพื้นที่รูปวงรีของภาพออก หากไม่มีอาร์กิวเมนต์ เมธอดนี้จะลบศูนย์กลางของภาพ

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

เมธอดไบนารี

binary(thresholds: List[Tuple[int, int]], invert: bool = False, zero: bool = False, mask: Image | None = None, to_bitmap: bool = False, copy: bool = False) Image

ตั้งค่าพิกเซลทั้งหมดในภาพเป็นดำหรือขาวขึ้นอยู่กับว่าพิกเซลแต่ละพิกเซลอยู่ใน tuple ค่าขีดแบ่งใดใดใน thresholds หรือไม่

thresholds เป็นรายการ tuple (lo, hi) สำหรับภาพระดับสีเทา หรือ tuple (l_lo, l_hi, a_lo, a_hi, b_lo, b_hi) สำหรับภาพ RGB565 ค่า min/max ที่สลับกันจะถูกแก้ไขอัตโนมัติ ส่วนประกอบที่ขาดหายจะเริ่มต้นเป็นช่วงสูงสุด

invert กลับด้านการจับคู่ค่าขีดแบ่ง

zero หากเป็น True จะตั้งค่าพิกเซลที่ผ่านค่าขีดแบ่งเป็นศูนย์และปล่อยพิกเซลอื่นไว้ตามเดิม

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

to_bitmap หากเป็น True จะแปลงข้อมูลภาพเป็น bitmap 1 บิตต่อพิกเซล สำหรับภาพขนาดเล็กมากอาจต้องใช้ copy=True

copy หากเป็น True คืนค่าภาพใหม่บน heap แทนการแก้ไขภาพต้นฉบับ

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

invert() Image

กลับด้านค่าพิกเซลทั้งหมดในภาพ (แต่ละพิกเซลกลายเป็น 255 - pixel สำหรับช่อง 8 บิต)

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

b_and(image: Image, mask: Image | None = None) Image

AND ตรรกะภาพนี้กับภาพอื่น

image สามารถเป็นวัตถุภาพ เส้นทางไปยังไฟล์ภาพที่ไม่ได้บีบอัด (bmp/pgm/ppm) หรือค่า scalar (tuple RGB888 หรือค่าพิกเซลพื้นฐาน)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

b_nand(image: Image, mask: Image | None = None) Image

NAND ตรรกะภาพนี้กับภาพอื่น

image สามารถเป็นวัตถุภาพ เส้นทางไปยังไฟล์ภาพที่ไม่ได้บีบอัด (bmp/pgm/ppm) หรือค่า scalar (tuple RGB888 หรือค่าพิกเซลพื้นฐาน)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

b_or(image: Image, mask: Image | None = None) Image

OR ตรรกะภาพนี้กับภาพอื่น

image สามารถเป็นวัตถุภาพ เส้นทางไปยังไฟล์ภาพที่ไม่ได้บีบอัด (bmp/pgm/ppm) หรือค่า scalar (tuple RGB888 หรือค่าพิกเซลพื้นฐาน)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

b_nor(image: Image, mask: Image | None = None) Image

NOR ตรรกะภาพนี้กับภาพอื่น

image สามารถเป็นวัตถุภาพ เส้นทางไปยังไฟล์ภาพที่ไม่ได้บีบอัด (bmp/pgm/ppm) หรือค่า scalar (tuple RGB888 หรือค่าพิกเซลพื้นฐาน)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

b_xor(image: Image, mask: Image | None = None) Image

XOR ตรรกะภาพนี้กับภาพอื่น

image สามารถเป็นวัตถุภาพ เส้นทางไปยังไฟล์ภาพที่ไม่ได้บีบอัด (bmp/pgm/ppm) หรือค่า scalar (tuple RGB888 หรือค่าพิกเซลพื้นฐาน)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

b_xnor(image: Image, mask: Image | None = None) Image

XNOR ตรรกะภาพนี้กับภาพอื่น

image สามารถเป็นวัตถุภาพ เส้นทางไปยังไฟล์ภาพที่ไม่ได้บีบอัด (bmp/pgm/ppm) หรือค่า scalar (tuple RGB888 หรือค่าพิกเซลพื้นฐาน)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

เมธอด ISP

awb(max: bool = False) Image

ปรับสมดุลสีขาวอัตโนมัติบนภาพโดยใช้อัลกอริทึม gray-world ทำงานบนภาพ RAW Bayer หรือ RGB565 ไม่มีผลกับภาพไบนารี/ระดับสีเทา

max หากเป็น True จะใช้อัลกอริทึม white-patch แทน

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ yuv

ccm(matrix: List[List[float]]) Image

คูณ color-correction-matrix แบบ floating-point ที่ส่งมากับภาพ matrices อาจเป็น 3x3 หรือ 3x4 (พร้อม offset column) ในรูปแบบ nested list หรือ flat list:

[[rr, rg, rb], [gr, gg, gb], [br, bg, bb]]
[[rr, rg, rb, ro], [gr, gg, gb, go], [br, bg, bb, bo]]
[rr, rg, rb, ro, gr, gg, gb, go, br, bg, bb, bo]

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

gamma(gamma: float = 1.0, contrast: float = 1.0, brightness: float = 0.0) Image

ปรับ gamma, contrast และ brightness ของภาพ

gamma ใช้ pow(pixel, 1/gamma) หลังจาก normalization ค่าที่มากกว่า 1.0 ทำให้สว่างขึ้น ค่าน้อยกว่า 1.0 ทำให้มืดลง

contrast ใช้ pixel * contrast หลังจาก normalization

brightness ใช้ pixel + brightness หลังจาก normalization

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

gamma_corr(gamma: float = 1.0, contrast: float = 1.0, brightness: float = 0.0) Image

Alias สำหรับ Image.gamma

เมธอดคณิตศาสตร์

negate() Image

Alias สำหรับ Image.invert

replace(image: Image | None = None, **kwargs) Image

Alias สำหรับ Image.draw_image() แทนที่ภาพนี้ด้วย image (หรือแปลงภาพนี้ in-place หาก image ถูกละเว้น) โดยใช้อาร์กิวเมนต์คีย์เวิร์ด draw_image มาตรฐาน อาร์กิวเมนต์ transform เป็น ndarray ขนาด 3x3 ที่อธิบาย perspective transformation (รองรับเฉพาะกล้อง OpenMV ที่เปิดใช้งาน ULAB)

assign(image: Image | None = None, **kwargs) Image

Alias สำหรับ Image.replace()

set(image: Image | None = None, **kwargs) Image

Alias สำหรับ Image.replace()

add(image: Image, mask: Image | None = None) Image

บวกภาพแบบ pixel-wise กับภาพนี้

image สามารถเป็นวัตถุภาพ เส้นทางไปยังไฟล์ภาพที่ไม่ได้บีบอัด (bmp/pgm/ppm) หรือค่า scalar (tuple RGB888 หรือค่าพิกเซลพื้นฐาน)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

sub(image: Image, mask: Image | None = None) Image

ลบ image แบบ pixel-wise จากภาพนี้ (self - image)

image สามารถเป็นวัตถุภาพ เส้นทางไปยังไฟล์ภาพที่ไม่ได้บีบอัด (bmp/pgm/ppm) หรือค่า scalar (tuple RGB888 หรือค่าพิกเซลพื้นฐาน)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

เมธอดนี้ยังรับชุดอาร์กิวเมนต์คีย์เวิร์ด Image.draw_image() ทั้งหมด (x, y, x_scale, y_scale, roi, rgb_channel, alpha, color_palette, alpha_palette, hint, transform)

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

rsub(image: Image, mask: Image | None = None) Image

ลบแบบ reverse: แทนที่ภาพนี้ด้วย image - self แบบ pixel-wise นอกจากนั้นเหมือนกับ Image.sub()

min(image: Image, mask: Image | None = None) Image

คืนค่าภาพ minimum ของสองภาพแบบ pixel-wise

image สามารถเป็นวัตถุภาพ เส้นทางไปยังไฟล์ภาพที่ไม่ได้บีบอัด (bmp/pgm/ppm) หรือค่า scalar (tuple RGB888 หรือค่าพิกเซลพื้นฐาน)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

max(image: Image, mask: Image | None = None) Image

คืนค่าภาพ maximum ของสองภาพแบบ pixel-wise

image สามารถเป็นวัตถุภาพ เส้นทางไปยังไฟล์ภาพที่ไม่ได้บีบอัด (bmp/pgm/ppm) หรือค่า scalar (tuple RGB888 หรือค่าพิกเซลพื้นฐาน)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

difference(image: Image, mask: Image | None = None) Image

คืนค่าภาพความแตกต่างสัมบูรณ์ระหว่างสองภาพ (เช่น ||a-b||)

image สามารถเป็นวัตถุภาพ เส้นทางไปยังไฟล์ภาพที่ไม่ได้บีบอัด (bmp/pgm/ppm) หรือค่า scalar (tuple RGB888 หรือค่าพิกเซลพื้นฐาน)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

blend(image: Image, x: int = 0, y: int = 0, alpha: int = 128, mask: Image | None = None, **kwargs) Image

Alias สำหรับ Image.draw_image() Alpha-blend image เข้ากับภาพนี้ alpha เป็นจำนวนเต็ม 0-256 ค่าที่ใกล้ 256 จะให้ความสำคัญกับภาพต้นฉบับ รับอาร์กิวเมนต์คีย์เวิร์ด Image.draw_image() ทั้งหมด

histeq(adaptive: bool = False, clip_limit: float = -1, mask: Image | None = None) Image

รัน histogram equalization บนภาพเพื่อปรับ contrast และ brightness ให้ปกติ

adaptive หากเป็น True จะรัน adaptive histogram equalization (ช้ากว่าแต่โดยทั่วไปดีกว่า)

clip_limit จำกัด contrast ในตัวแปร adaptive (ค่าเล็กน้อยเช่น 10 ให้ผลลัพธ์ CLAHE ที่ดี)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

เมธอดการกรอง

erode(size: int, threshold: int | None = None, mask: Image | None = None) Image

ลบพิกเซลออกจากขอบของบริเวณที่แบ่งส่วน Convolve kernel ((size*2)+1)x((size*2)+1) ผ่านภาพ โดยล้างพิกเซลตรงกลางหากเพื่อนบ้านมากกว่า threshold ถูกล้าง (ทำงานเป็น erode มาตรฐานหาก threshold เป็น None)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

dilate(size: int, threshold: int | None = None, mask: Image | None = None) Image

เพิ่มพิกเซลที่ขอบของบริเวณที่แบ่งส่วน Convolve kernel ((size*2)+1)x((size*2)+1) ผ่านภาพ โดยตั้งค่าพิกเซลตรงกลางหากเพื่อนบ้านมากกว่า threshold ถูกตั้งค่า (ทำงานเป็น dilate มาตรฐานหาก threshold เป็น None)

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

open(size: int, threshold: int | None = None, mask: Image | None = None) Image

ทำ erosion แล้วตามด้วย dilation ดู Image.erode() และ Image.dilate()

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

close(size: int, threshold: int | None = None, mask: Image | None = None) Image

ทำ dilation แล้วตามด้วย erosion ดู Image.dilate() และ Image.erode()

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

top_hat(size: int, threshold: int | None = None, mask: Image | None = None) Image

คืนค่าความแตกต่างภาพระหว่างภาพและภาพที่ผ่าน Image.open()

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

black_hat(size: int, threshold: int | None = None, mask: Image | None = None) Image

คืนค่าความแตกต่างภาพระหว่างภาพและภาพที่ผ่าน Image.close()

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

mean(size: int, threshold: bool | None = False, offset: int | None = 0, invert: bool | None = False, mask: Image | None = None) Image

ฟิลเตอร์เบลอแบบ mean มาตรฐานโดยใช้ box filter

size คือขนาด kernel ใช้ 1 (kernel 3x3), 2 (kernel 5x5) เป็นต้น

threshold หากเป็น True จะกำหนดค่าขีดแบ่งแบบ adaptive สำหรับเอาต์พุตฟิลเตอร์เป็นภาพไบนารี offset เลื่อนการกำหนดค่าขีดแบ่ง (ค่าลบทำให้พิกเซลขาวมากขึ้น ค่าบวกทำให้น้อยลง) invert กลับด้านเอาต์พุตไบนารี

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

median(size: int, percentile: float | None = 0.5, threshold: bool | None = False, offset: int | None = 0, invert: bool | None = False, mask: Image | None = None) Image

รัน percentile filter บนภาพ (median ตามค่าเริ่มต้น)

size คือขนาด kernel ใช้ 1 (kernel 3x3), 2 (kernel 5x5) เป็นต้น

percentile คือ percentile ที่จะเลือกจากแต่ละ kernel (0 = min, 0.5 = median, 1.0 = max) ค่าเริ่มต้น 0.5

threshold หากเป็น True จะกำหนดค่าขีดแบ่งแบบ adaptive สำหรับเอาต์พุตฟิลเตอร์เป็นภาพไบนารี offset เลื่อนการกำหนดค่าขีดแบ่ง (ค่าลบทำให้พิกเซลขาวมากขึ้น ค่าบวกทำให้น้อยลง) invert กลับด้านเอาต์พุตไบนารี

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

mode(size: int, threshold: bool | None = False, offset: int | None = 0, invert: bool | None = False, mask: Image | None = None) Image

แทนที่แต่ละพิกเซลด้วย mode ของพิกเซลใกล้เคียง อาจเกิด artifact ที่ขอบภาพ RGB เนื่องจากการดำเนินการแบบ non-linear

size คือขนาด kernel ใช้ 1 (kernel 3x3), 2 (kernel 5x5) เป็นต้น

threshold หากเป็น True จะกำหนดค่าขีดแบ่งแบบ adaptive สำหรับเอาต์พุตฟิลเตอร์เป็นภาพไบนารี offset เลื่อนการกำหนดค่าขีดแบ่ง (ค่าลบทำให้พิกเซลขาวมากขึ้น ค่าบวกทำให้น้อยลง) invert กลับด้านเอาต์พุตไบนารี

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

midpoint(size: int, bias: float | None = 0.5, threshold: bool | None = False, offset: int | None = 0, invert: bool | None = False, mask: Image | None = None) Image

รัน midpoint filter บนภาพ ฟิลเตอร์นี้หาจุดกึ่งกลาง ((max-min)/2) ของแต่ละ pixel neighborhood ในภาพ

size คือขนาด kernel ใช้ 1 (kernel 3x3), 2 (kernel 5x5) เป็นต้น

bias ควบคุมการผสม min/max ค่า 0 สำหรับ min filtering เท่านั้น 1.0 สำหรับ max filtering เท่านั้น โดยใช้ bias คุณสามารถ min/max filter ภาพ

threshold หากเป็น True จะกำหนดค่าขีดแบ่งแบบ adaptive สำหรับเอาต์พุตฟิลเตอร์เป็นภาพไบนารี offset เลื่อนการกำหนดค่าขีดแบ่ง (ค่าลบทำให้พิกเซลขาวมากขึ้น ค่าบวกทำให้น้อยลง) invert กลับด้านเอาต์พุตไบนารี

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

morph(size: int, kernel: list, mul: float | None = 1.0, add: float | None = 0.0, threshold: bool | None = False, offset: int | None = 0, invert: bool | None = False, mask: Image | None = None) Image

Convolve ภาพด้วย filter kernel ตามอำเภอใจ

size ควบคุมขนาด kernel ซึ่งต้องมี ((size*2)+1)x((size*2)+1) elements

kernel คือ kernel ที่จะ convolve ด้วย เป็น flat 1D list/tuple ของ ((size*2)+1)*((size*2)+1) elements หรือ 2D list/tuple ที่มี ((size*2)+1) แถวของ ((size*2)+1) elements

mul คือ multiplicative contrast scale (ค่าเริ่มต้น 1.0)

add คือ additive brightness offset (ค่าเริ่มต้น 0.0)

threshold หากเป็น True จะกำหนดค่าขีดแบ่งแบบ adaptive สำหรับเอาต์พุตฟิลเตอร์เป็นภาพไบนารี offset เลื่อนการกำหนดค่าขีดแบ่ง (ค่าลบทำให้พิกเซลขาวมากขึ้น ค่าบวกทำให้น้อยลง) invert กลับด้านเอาต์พุตไบนารี

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

gaussian(size: int, unsharp: bool | None = False, mul: float | None = 1.0, add: float | None = 0.0, threshold: bool | None = False, offset: int | None = 0, invert: bool | None = False, mask: Image | None = None) Image

Convolve ภาพด้วย smoothing gaussian kernel

size คือขนาด kernel ใช้ 1 (kernel 3x3), 2 (kernel 5x5) เป็นต้น

unsharp หากเป็น True จะทำ unsharp mask operation (คมขอบ) แทน gaussian ธรรมดา

mul คือ multiplicative contrast scale (ค่าเริ่มต้น 1.0)

add คือ additive brightness offset (ค่าเริ่มต้น 0.0)

threshold หากเป็น True จะกำหนดค่าขีดแบ่งแบบ adaptive สำหรับเอาต์พุตฟิลเตอร์เป็นภาพไบนารี offset เลื่อนการกำหนดค่าขีดแบ่ง (ค่าลบทำให้พิกเซลขาวมากขึ้น ค่าบวกทำให้น้อยลง) invert กลับด้านเอาต์พุตไบนารี

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

laplacian(size: int, sharpen: bool | None = False, mul: float | None = 1.0, add: float | None = 0.0, threshold: bool | None = False, offset: int | None = 0, invert: bool | None = False, mask: Image | None = None) Image

Convolve ภาพด้วย edge-detecting laplacian kernel

size คือขนาด kernel ใช้ 1 (kernel 3x3), 2 (kernel 5x5) เป็นต้น

sharpen หากเป็น True จะทำให้ภาพคมชัดขึ้นแทนการแสดงผลตอบสนองขอบที่ไม่ผ่านค่าขีดแบ่ง

mul คือ multiplicative contrast scale (ค่าเริ่มต้น 1.0)

add คือ additive brightness offset (ค่าเริ่มต้น 0.0)

threshold หากเป็น True จะกำหนดค่าขีดแบ่งแบบ adaptive สำหรับเอาต์พุตฟิลเตอร์เป็นภาพไบนารี offset เลื่อนการกำหนดค่าขีดแบ่ง (ค่าลบทำให้พิกเซลขาวมากขึ้น ค่าบวกทำให้น้อยลง) invert กลับด้านเอาต์พุตไบนารี

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

bilateral(size: int, color_sigma: float | None = 0.1, space_sigma: float | None = 1.0, threshold: bool | None = False, offset: int | None = 0, invert: bool | None = False, mask: Image | None = None) Image

Convolve ภาพด้วย bilateral filter (smoothing แบบรักษาขอบ)

size คือขนาด kernel ใช้ 1 (kernel 3x3), 2 (kernel 5x5) เป็นต้น

color_sigma ควบคุมความทนทานการจับคู่สี ค่าสูงกว่าทำให้เกิด color blurring มากขึ้น

space_sigma ควบคุมการ blurring เชิงพื้นที่ ค่าสูงกว่าทำให้เกิด pixel blurring มากขึ้น

threshold หากเป็น True จะกำหนดค่าขีดแบ่งแบบ adaptive สำหรับเอาต์พุตฟิลเตอร์เป็นภาพไบนารี offset เลื่อนการกำหนดค่าขีดแบ่ง (ค่าลบทำให้พิกเซลขาวมากขึ้น ค่าบวกทำให้น้อยลง) invert กลับด้านเอาต์พุตไบนารี

mask เป็นภาพไบนารีที่ใช้เป็น mask ระดับพิกเซล เฉพาะพิกเซลที่ตั้งค่าใน mask เท่านั้นที่จะถูกแก้ไข

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv

เมธอดเรขาคณิต

linpolar(reverse: bool = False, *, x: int | None = None, y: int | None = None) Image

Reproject ภาพจากพิกัด Cartesian เป็นพิกัด linear polar

ตั้งค่า reverse=True เพื่อ reproject ในทิศทางตรงข้าม

x และ y ระบุพิกัดศูนย์กลางของการแปลงเป็นพิกเซลภาพ หาก x เป็น None (ค่าเริ่มต้น) จะถูกตั้งค่าเป็นครึ่งหนึ่งของความกว้างภาพ เช่นเดียวกัน y ค่าเริ่มต้นเป็นครึ่งหนึ่งของความสูงภาพ

Linear polar reproject แปลงการหมุนภาพเป็นการแปล x

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

logpolar(reverse: bool = False, *, x: int | None = None, y: int | None = None) Image

Reproject ภาพจากพิกัด Cartesian เป็นพิกัด log polar

ตั้งค่า reverse=True เพื่อ reproject ในทิศทางตรงข้าม

x และ y ระบุพิกัดศูนย์กลางของการแปลงเป็นพิกเซลภาพ หาก x เป็น None (ค่าเริ่มต้น) จะถูกตั้งค่าเป็นครึ่งหนึ่งของความกว้างภาพ เช่นเดียวกัน y ค่าเริ่มต้นเป็นครึ่งหนึ่งของความสูงภาพ

Log polar reproject แปลงการหมุนภาพเป็นการแปล x และการขยาย/ซูมเป็นการแปล y

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

lens_corr(strength: float = 1.8, zoom: float = 1.0, x_corr: float = 0.0, y_corr: float = 0.0) Image

ทำ lens correction เพื่อแก้ fisheye ในภาพอันเนื่องจากความผิดเพี้ยนของเลนส์

strength คือ float ที่กำหนดปริมาณการแก้ fisheye ในภาพ ลองใช้ 1.8 เป็นค่าเริ่มต้น จากนั้นเพิ่มหรือลดจนกว่าภาพจะดูดี

zoom คือปริมาณการซูมเข้าในภาพ ค่าเริ่มต้น 1.0

x_corr offset พิกเซล floating point จากศูนย์กลาง สามารถเป็นลบหรือบวก

y_corr offset พิกเซล floating point จากศูนย์กลาง สามารถเป็นลบหรือบวก

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

rotation_corr(x_rotation: float = 0.0, y_rotation: float = 0.0, z_rotation: float = 0.0, x_translation: float = 0.0, y_translation: float = 0.0, zoom: float = 1.0, fov: float = 60.0, corners: List[Tuple[int, int]] | None = None) Image

แก้ไขปัญหา perspective ในภาพโดยการหมุน 3D ของบัฟเฟอร์เฟรม

x_rotation คือจำนวนองศาที่หมุนภาพในบัฟเฟอร์เฟรมรอบแกน x (เช่น หมุนภาพขึ้นและลง)

y_rotation คือจำนวนองศาที่หมุนภาพในบัฟเฟอร์เฟรมรอบแกน y (เช่น หมุนภาพซ้ายและขวา)

z_rotation คือจำนวนองศาที่หมุนภาพในบัฟเฟอร์เฟรมรอบแกน z (เช่น หมุนภาพอยู่กับที่)

x_translation คือจำนวนหน่วยที่ย้ายภาพไปทางซ้ายหรือขวาหลังการหมุน เนื่องจากการแปลนี้ถูกนำไปใช้ใน 3D space หน่วยจึงไม่ใช่พิกเซล...

y_translation คือจำนวนหน่วยที่ย้ายภาพขึ้นหรือลงหลังการหมุน เนื่องจากการแปลนี้ถูกนำไปใช้ใน 3D space หน่วยจึงไม่ใช่พิกเซล...

zoom คือปริมาณการซูมเข้าในภาพ ค่าเริ่มต้น 1.0

fov คือ field-of-view ที่ใช้สำหรับการฉาย 2D->3D ภายใน เมื่อ fov เข้าใกล้ 0 ภาพจะถูกวางที่ infinity เมื่อเข้าใกล้ 180 ภาพจะถูกวางภายใน viewport

corners เป็นรายการ tuple (x, y) สี่ค่าที่ใช้สร้าง homography 4 จุด map มุมไปยัง (0, 0), (image_width-1, 0), (image_width-1, image_height-1) และ (0, image_height-1) ก่อนนำ 3D rotation ไปใช้ มีประโยชน์สำหรับ birds-eye-view transforms

คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์ .

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

เมธอดรับค่า

get_similarity(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: int | Image | None = None, alpha_palette: Image | None = None, hint: int = 0, transform: ndarray | None = None, dssim: bool = False) Similarity

คำนวณความเหมือนระหว่างสองภาพโดยใช้ Structural Similarity Index (SSIM) SSIM มีช่วงจาก -1 (ตรงข้าม) ถึง 1 (เหมือนกัน) คืนค่าวัตถุ image.similarity

image คือภาพที่จะเปรียบเทียบ (วัตถุภาพหรือสตริงเส้นทาง เช่น "test.jpg")

x, y, x_scale, y_scale, roi, rgb_channel, alpha, color_palette, alpha_palette, hint, และ transform รับค่าเดียวกับ Image.draw_image()

dssim หากเป็น True จะคืนค่า Structural Dissimilarity Index (DSSIM) แทน โดย 0 หมายถึงเหมือนกันและ 1 หมายถึงต่างกันอย่างสมบูรณ์

get_histogram(thresholds: List[Tuple[int, int]] | None = None, invert: bool = False, roi: Tuple[int, int, int, int] | None = None, bins: int = -1, l_bins: int = -1, a_bins: int = -1, b_bins: int = -1, difference: Image | None = None) histogram

คำนวณ histogram ที่ normalized บนทุกช่องสีสำหรับ roi และคืนค่าวัตถุ image.histogram ยังใช้ได้เป็น Image.get_hist() หรือ Image.histogram()

thresholds เป็นรายการ tuple (lo, hi) สำหรับภาพระดับสีเทา หรือ tuple (l_lo, l_hi, a_lo, a_hi, b_lo, b_hi) สำหรับภาพ RGB565 หากส่งมา histogram จะถูกคำนวณเฉพาะพิกเซลที่อยู่ในค่าขีดแบ่ง

invert กลับด้านการจับคู่ค่าขีดแบ่ง

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

bins (ระดับสีเทา) หรือ l_bins/a_bins/b_bins (RGB565) กำหนดจำนวน histogram bins ต่อช่อง ต้องมากกว่า 2 ค่าเริ่มต้นเป็น bins สูงสุดต่อช่อง

difference อาจตั้งค่าเป็นวัตถุภาพเพื่อดำเนินการบนความแตกต่างระหว่างภาพปัจจุบันและภาพนั้นโดยไม่ต้องใช้บัฟเฟอร์พิเศษ

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

get_statistics(thresholds: List[Tuple[int, int]] | None = None, invert: bool = False, roi: Tuple[int, int, int, int] | None = None, bins: int = -1, l_bins: int = -1, a_bins: int = -1, b_bins: int = -1, difference: Image | None = None) statistics

คำนวณค่าเฉลี่ย ค่ามัธยฐาน ค่าฐานนิยม ส่วนเบี่ยงเบนมาตรฐาน ค่าต่ำสุด ค่าสูงสุด ควอร์ไทล์ล่าง และควอร์ไทล์บนสำหรับทุกช่องสีสำหรับ roi และคืนค่าวัตถุ image.statistics ยังใช้ได้เป็น Image.get_stats() หรือ Image.statistics()

thresholds เป็นรายการ tuple (lo, hi) สำหรับภาพระดับสีเทา หรือ tuple (l_lo, l_hi, a_lo, a_hi, b_lo, b_hi) สำหรับภาพ RGB565 หากส่งมา สถิติจะถูกคำนวณเฉพาะพิกเซลที่อยู่ในค่าขีดแบ่ง

invert กลับด้านการจับคู่ค่าขีดแบ่ง

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

bins (ระดับสีเทา) หรือ l_bins/a_bins/b_bins (RGB565) กำหนดจำนวน histogram bins ต่อช่อง ต้องมากกว่า 2 ค่าเริ่มต้นเป็น bins สูงสุดต่อช่อง

difference อาจตั้งค่าเป็นวัตถุภาพเพื่อดำเนินการบนความแตกต่างระหว่างภาพปัจจุบันและภาพนั้นโดยไม่ต้องใช้บัฟเฟอร์พิเศษ

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

get_regression(thresholds: List[Tuple[int, int]], invert: bool = False, roi: Tuple[int, int, int, int] | None = None, x_stride: int = 2, y_stride: int = 1, area_threshold: int = 10, pixels_threshold: int = 10, target_size: Tuple[int, int] = (80, 60)) line

คำนวณ linear regression (Theil-Sen) บนพิกเซลที่ผ่านค่าขีดแบ่งทั้งหมดในภาพ คืนค่าวัตถุ image.line หรือ None หากไม่พบเส้น

thresholds เป็นรายการ tuple (lo, hi) สำหรับภาพระดับสีเทา หรือ tuple (l_lo, l_hi, a_lo, a_hi, b_lo, b_hi) สำหรับภาพ RGB565

invert กลับด้านการจับคู่ค่าขีดแบ่ง

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

x_stride และ y_stride ควบคุมจำนวนพิกเซลที่ข้ามขณะประเมินภาพ

area_threshold พื้นที่กรอบขอบเขตขั้นต่ำ ผลลัพธ์ที่เล็กกว่าจะคืนค่า None

pixels_threshold จำนวนพิกเซลที่ผ่านค่าขีดแบ่งขั้นต่ำ ผลลัพธ์ที่น้อยกว่าจะคืนค่า None

target_size เป็น tuple (w, h) ROI จะถูก scale ลดพื้นที่เพื่อให้พอดีกับขนาดนี้ก่อนรันอัลกอริทึม O(N^2) ค่าเริ่มต้น (80, 60)

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

เมธอดการตรวจจับ

find_blobs(thresholds: List[Tuple[int, int]], invert: bool = False, roi: Tuple[int, int, int, int] | None = None, x_stride: int = 2, y_stride: int = 1, area_threshold: int = 10, pixels_threshold: int = 10, merge: bool = False, margin: int = 0, threshold_cb: Callable | None = None, merge_cb: Callable | None = None, x_hist_bins_max: int = 0, y_hist_bins_max: int = 0) List[blob]

ค้นหา blob ทั้งหมด (บริเวณพิกเซลที่เชื่อมต่อที่ผ่านการทดสอบค่าขีดแบ่ง) ในภาพและคืนค่ารายการวัตถุ image.blob

thresholds เป็นรายการ tuple (lo, hi) สำหรับภาพระดับสีเทา หรือ tuple (l_lo, l_hi, a_lo, a_hi, b_lo, b_hi) สำหรับภาพ RGB565 (ช่อง LAB) ส่งได้สูงสุด 32 tuple ค่า min/max ที่สลับกันจะถูกแก้ไขอัตโนมัติ ส่วนประกอบที่ขาดหายจะเริ่มต้นเป็นช่วงสูงสุด

invert กลับด้านการจับคู่ค่าขีดแบ่ง

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

x_stride และ y_stride ควบคุมจำนวนพิกเซลที่ข้ามขณะค้นหา blob เพิ่มค่าหาก blob ที่รู้จักมีขนาดใหญ่

area_threshold พื้นที่กรอบขอบเขตขั้นต่ำ blob ที่เล็กกว่าจะถูกกรอง

pixels_threshold จำนวนพิกเซลที่ผ่านค่าขีดแบ่งขั้นต่ำ blob ที่เล็กกว่าจะถูกกรอง

merge หากเป็น True จะรวม blob ที่มีสี่เหลี่ยมกรอบขอบเขตที่ตัดกัน margin ขยาย/หดสี่เหลี่ยมกรอบขอบเขตที่ใช้สำหรับการตัด blob ที่รวมกันจะ OR เวกเตอร์บิต code (หนึ่งบิตต่อค่าขีดแบ่ง)

threshold_cb ถูกเรียกต่อ blob หลังจากกำหนดค่าขีดแบ่ง คืนค่า True เพื่อเก็บ False เพื่อกรอง

merge_cb ถูกเรียกต่อคู่ blob ที่กำลังจะรวมกัน คืนค่า True เพื่ออนุญาตการรวม False เพื่อป้องกัน

x_hist_bins_max หากไม่ใช่ศูนย์ จะเติม blob แต่ละ blob ด้วย x_histogram projection โดยใช้จำนวน bins นี้

y_hist_bins_max หากไม่ใช่ศูนย์ จะเติม blob แต่ละ blob ด้วย y_histogram projection โดยใช้จำนวน bins นี้

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

find_lines(roi: Tuple[int, int, int, int] | None = None, x_stride: int = 2, y_stride: int = 1, threshold: int = 1000, theta_margin: int = 25, rho_margin: int = 25) List[line]

ค้นหาเส้นอนันต์ทั้งหมดในภาพโดยใช้ hough transform คืนค่ารายการวัตถุ image.line

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

x_stride และ y_stride ควบคุมจำนวนพิกเซลที่ข้ามระหว่าง hough transform

threshold ขนาดเส้นขั้นต่ำ (ผลรวมขนาด sobel ตามเส้น) เส้นที่ต่ำกว่านี้จะถูกกรองออก

theta_margin และ rho_margin ควบคุมการรวม เส้นที่อยู่ในค่าขีดแบ่งเหล่านี้จะถูกรวมกัน

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

find_line_segments(roi: Tuple[int, int, int, int] | None = None, merge_distance: int = 0, max_theta_difference: int = 15) List[line]

ค้นหาส่วนของเส้นในภาพ คืนค่ารายการวัตถุ image.line

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

merge_distance คือระยะห่างพิกเซลสูงสุดระหว่างสองส่วนที่จะรวมกัน

max_theta_difference คือความแตกต่าง theta สูงสุดเป็นองศาระหว่างส่วนที่จะรวมกัน

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

find_circles(roi: Tuple[int, int, int, int] | None = None, x_stride: int = 2, y_stride: int = 1, threshold: int = 2000, x_margin: int = 10, y_margin: int = 10, r_margin: int = 10, r_min: int = 2, r_max: int | None = None, r_step: int = 2) List[circle]

ค้นหาวงกลมในภาพโดยใช้ hough transform คืนค่ารายการวัตถุ image.circle

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

x_stride และ y_stride ควบคุมจำนวนพิกเซลที่ข้ามระหว่าง hough transform

threshold ขนาดวงกลมขั้นต่ำ (ผลรวมขนาด sobel ตามวงกลม) วงกลมที่ต่ำกว่านี้จะถูกกรองออก

x_margin, y_margin, และ r_margin ควบคุมการรวม วงกลมที่อยู่ในค่าขีดแบ่งเหล่านี้จะถูกรวมกัน

r_min รัศมีวงกลมขั้นต่ำ ค่าเริ่มต้น 2

r_max รัศมีวงกลมสูงสุด ค่าเริ่มต้น min(roi.w/2, roi.h/2)

r_step ขนาดขั้นของรัศมี ค่าเริ่มต้น 2

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

find_rects(roi: Tuple[int, int, int, int] | None = None, threshold: int = 1000) List[rect]

ค้นหาสี่เหลี่ยมในภาพโดยใช้อัลกอริทึมการตรวจจับ apriltag quad คืนค่ารายการวัตถุ image.rect

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

threshold ขนาดขอบขั้นต่ำ (ผลรวมขนาด sobel ตามขอบสี่เหลี่ยม) สี่เหลี่ยมที่ต่ำกว่านี้จะถูกกรองออก

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

find_qrcodes(roi: Tuple[int, int, int, int] | None = None) List[qrcode]

ค้นหา qrcode ทั้งหมดภายใน roi และคืนค่ารายการวัตถุ image.qrcode

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

find_apriltags(roi: Tuple[int, int, int, int] | None = None, families: int = TAG36H11, fx: float | None = None, fy: float | None = None, cx: float | None = None, cy: float | None = None) List[apriltag]

ค้นหา apriltag ทั้งหมดภายใน roi และคืนค่ารายการวัตถุ image.apriltag

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

families เป็น bitmask ของกลุ่ม tag ที่จะถอดรหัส เป็น OR ตรรกะของ:

ค่าเริ่มต้นคือ image.TAG36H11 เวลาในการตรวจจับจะ scale ตามจำนวนกลุ่มที่เปิดใช้งาน

fx และ fy คือความยาวโฟกัสกล้อง X และ Y เป็นพิกเซล

cx และ cy คือจุดศูนย์กลางภาพ โดยทั่วไปคือ image.width()/2 และ image.height()/2

ไม่รองรับภาพที่บีบอัด

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

find_datamatrices(roi: Tuple[int, int, int, int] | None = None, effort: int = 200) List[datamatrix]

ค้นหา datamatrix ทั้งหมดภายใน roi และคืนค่ารายการวัตถุ image.datamatrix

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

effort ควบคุมเวลาที่ใช้ในการค้นหาการจับคู่ data matrix ค่าสูงกว่าปรับปรุงการตรวจจับแต่แลกมาด้วย frame rate ค่าต่ำกว่า ~160 จะล้มเหลวในการตรวจจับ ค่าสูงกว่า ~240 ให้ผลตอบแทนลดลง ค่าเริ่มต้น 200

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

find_barcodes(roi: Tuple[int, int, int, int] | None = None) List[barcode]

ค้นหา barcode 1D ทั้งหมดภายใน roi และคืนค่ารายการวัตถุ image.barcode สแกนทั้งแนวนอนและแนวตั้ง

ประเภท barcode ที่รองรับ: image.EAN2, image.EAN5, image.EAN8, image.UPCE, image.ISBN10, image.UPCA, image.EAN13, image.ISBN13, image.I25, image.DATABAR (RSS-14), image.DATABAR_EXP (RSS-Expanded), image.CODABAR, image.CODE39, image.PDF417, image.CODE93, image.CODE128

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

find_displacement(template: Image, roi: Tuple[int, int, int, int] | None = None, template_roi: Tuple[int, int, int, int] | None = None, logpolar: bool = False, fix_rotation_scale: bool = False) displacement

ค้นหา translation offset ของภาพนี้จาก template โดยใช้ phase correlation คืนค่าวัตถุ image.displacement

roi เป็นสี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

template_roi คือ region-of-interest ของ template ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ template roi และ template_roi ต้องมีความกว้างและความสูงเท่ากัน

logpolar หากเป็น True คืนค่าการเปลี่ยนแปลงการหมุน/scale แทน translation x/y

fix_rotation_scale หากเป็น True คำนวณ displacement หลังจากจัดแนวการหมุนและ scale (มีความหมายเฉพาะเมื่อ logpolar=False)

Note

ใช้เมธอดนี้บนขนาดภาพที่เป็นกำลังของ 2 (เช่น sensor.B64X64)

ไม่รองรับภาพที่บีบอัดหรือภาพ bayer ไม่รองรับบน OpenMV Cam M4

find_template(template: Image, threshold: float, roi: Tuple[int, int, int, int] | None = None, step: int = 2, search: int = SEARCH_EX) Tuple[int, int, int, int] | None

พยายามค้นหาตำแหน่งแรกในภาพที่ template ตรงกันโดยใช้ Normalized Cross Correlation คืนค่า bounding box tuple (x, y, w, h) หรือ None

template คือภาพระดับสีเทาที่จะจับคู่กับภาพนี้

threshold คือค่า (0.0-1.0) ค่าสูงกว่าลด false positives และการตรวจจับ ค่าต่ำกว่าทำตรงข้าม

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

step คือจำนวนพิกเซลที่ข้ามขณะค้นหา (ใช้เฉพาะในโหมด image.SEARCH_EX)

search คือ image.SEARCH_DS (diamond search เร็วกว่า) หรือ image.SEARCH_EX (exhaustive search)

ใช้งานได้เฉพาะภาพระดับสีเทา

find_features(cascade: Cascade, threshold: float = 0.5, scale: float = 1.5, roi: Tuple[int, int, int, int] | None = None) List[Tuple[int, int, int, int]]

ค้นหาบริเวณที่ตรงกับ Haar cascade ที่ส่งมาในภาพและคืนค่ารายการ bounding box tuple (x, y, w, h) คืนค่ารายการว่างหากไม่พบคุณลักษณะ

cascade คือวัตถุ Haar Cascade (ดู image.HaarCascade())

threshold (0.0-1.0) ค่าต่ำกว่าเพิ่มอัตราการตรวจจับและอัตรา false-positive

scale ต้องมากกว่า 1.0 ค่าสูงกว่าทำงานเร็วกว่าแต่ได้ผลลัพธ์ที่แย่กว่า

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

find_eye(roi: Tuple[int, int, int, int]) Tuple[int, int]

ค้นหาม่านตาใน tuple (x, y, w, h) ของบริเวณที่สนใจ (ROI) รอบดวงตา คืนค่าตำแหน่ง (x, y) ของม่านตา หรือ (0, 0) หากไม่พบ

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI)

ใช้งานได้เฉพาะภาพระดับสีเทา

find_lbp(roi: Tuple[int, int, int, int]) lbp_descriptor

ดึง keypoints LBP (local-binary-patterns) จาก region-of-interest ใช้ image.match_descriptor() เพื่อเปรียบเทียบสอง descriptors

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI)

ใช้งานได้เฉพาะภาพระดับสีเทา

find_keypoints(roi: Tuple[int, int, int, int] | None = None, threshold: int = 20, normalized: bool = False, scale_factor: float = 1.5, max_keypoints: int = 100, corner_detector: int = CORNER_AGAST) kp_descriptor | None

ดึง keypoints ORB จาก region-of-interest ใช้ image.match_descriptor() เพื่อเปรียบเทียบสอง descriptors คืนค่า None หากไม่พบ keypoints

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ

threshold (0-255) ควบคุมจำนวน corners ที่ดึงได้ ค่าขีดแบ่งต่ำกว่าได้ corners มากกว่า ใช้ ~20 สำหรับ AGAST, ~60-80 สำหรับ FAST

normalized หากเป็น True จะปิดการดึง keypoints แบบ multi-resolution

scale_factor ต้องมากกว่า 1.0 ค่าสูงกว่าทำงานเร็วกว่าแต่ได้ผลลัพธ์ที่แย่กว่า

max_keypoints คือจำนวน keypoints สูงสุดที่จะเก็บไว้

corner_detector คือ image.CORNER_FAST หรือ image.CORNER_AGAST

ใช้งานได้เฉพาะภาพระดับสีเทา

find_edges(edge_type: int, threshold: Tuple[int, int] = (100, 200)) Image

แปลงภาพเป็นดำและขาวโดยเหลือเฉพาะขอบเป็นพิกเซลขาว

  • image.EDGE_SIMPLE - อัลกอริทึม simple thresholded high pass filter

  • image.EDGE_CANNY - อัลกอริทึม Canny edge detection

threshold เป็น tuple สองค่าที่มีค่าขีดแบ่งต่ำและสูง คุณสามารถควบคุมคุณภาพขอบโดยปรับค่าเหล่านี้ ค่าเริ่มต้นคือ (100, 200)

ใช้งานได้เฉพาะภาพระดับสีเทา

find_hog(roi: Tuple[int, int, int, int] | None = None, size: int = 8) Image

แทนที่พิกเซลใน ROI ด้วยเส้น HOG (histogram of orientated gradients)

roi เป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) หากไม่ระบุ จะเท่ากับสี่เหลี่ยมภาพ เฉพาะพิกเซลภายใน roi เท่านั้นที่ถูกดำเนินการ

ใช้งานได้เฉพาะภาพระดับสีเทา

เมธอดนี้ไม่รองรับบน OpenMV Cam M4

stereo_disparity(reversed: bool = False, max_disparity: int = 64, threshold: int = 64) Image

รับภาพระดับสีเทาแบบ double-wide ที่มีเอาต์พุตของเซ็นเซอร์กล้องสองตัวที่วางเคียงกันและแทนที่ครึ่งหนึ่งด้วยภาพ stereo disparity (แต่ละพิกเซลแสดงความลึก) เช่น สำหรับกล้อง 320x240 สองตัว ส่งภาพ 640x240

reversed ตามค่าเริ่มต้นภาพซ้ายถูกเปรียบเทียบกับขวาและภาพขวาถูกแทนที่ ตั้งค่า True เพื่อเปรียบเทียบขวา->ซ้ายและแทนที่ภาพซ้าย

max_disparity คือระยะทางสูงสุด (1-255) ในการค้นหา block พิกเซลที่ตรงกันโดยใช้ sum-of-absolute differences ค่าสูงกว่าใช้เวลามากขึ้นแบบเอ็กซ์โปเนนเชียลแต่ให้เอาต์พุตคุณภาพสูงกว่า

threshold หาก sum-of-absolute differences ระหว่างสอง block น้อยกว่าหรือเท่ากับค่าขีดแบ่งนี้ ถือว่าตรงกัน

รัน selective search บนภาพและคืนค่ารายการ bounding box tuple (x, y, w, h) ของข้อเสนอวัตถุ

threshold คือค่าขีดแบ่งการแบ่งส่วน ค่าสูงกว่าให้บริเวณที่น้อยกว่า/ใหญ่กว่า

size คือขนาดบริเวณขั้นต่ำหลังการรวม

a1, a2, a3 คือน้ำหนักความเหมือนสี/พื้นผิว/ขนาดที่ใช้เมื่อรวมบริเวณ