คลาส 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 และจอแสดงผลจากไฟล์ -- ส่งสตริงเส้นทางไปยังตัวสร้าง
ImageBMP, 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 จากวัตถุ JPEGbytes()หรือ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 เพื่อส่งโดยอัตโนมัติ
เมธอดพื้นฐาน¶
- format() int¶
คืนค่า
image.GRAYSCALEสำหรับภาพระดับสีเทา,image.RGB565สำหรับภาพ RGB565,image.BAYERสำหรับภาพแบบ bayer pattern และimage.JPEGสำหรับภาพ JPEG
- 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 บิต หากเรียกเมธอดนี้โดยตั้งrgbtupleImage.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-placecopy_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-placecopy_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-placecopy_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-placecopy_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-placecopy_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-placecopy_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-placecopy_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-placecopy_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-placecopy_to_fbหากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรมcopy_to_fbมีความสำคัญกว่าcopyไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้วqualityควบคุมคุณภาพการบีบอัด jpeg ค่าสามารถอยู่ระหว่าง 0 ถึง 100subsamplingสามารถเป็น:image.JPEG_SUBSAMPLING_AUTO: ใช้การ subsampling ที่ดีที่สุดสำหรับภาพตามคุณภาพimage.JPEG_SUBSAMPLING_444: ใช้การ subsampling แบบ 4:4:4image.JPEG_SUBSAMPLING_422: ใช้การ subsampling แบบ 4:2:2image.JPEG_SUBSAMPLING_420: ใช้การ subsampling แบบ 4:2:0
คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์
.
- 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-placecopy_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-placecopy_to_fbหากเป็น True ภาพจะถูกโหลดโดยตรงเข้าบัฟเฟอร์เฟรมcopy_to_fbมีความสำคัญกว่าcopyไม่มีผลพิเศษหากภาพอยู่ในบัฟเฟอร์เฟรมแล้วqualityควบคุมคุณภาพการบีบอัด jpeg ค่าสามารถอยู่ระหว่าง 0 ถึง 100subsamplingสามารถเป็น:image.JPEG_SUBSAMPLING_AUTO: ใช้การ subsampling ที่ดีที่สุดสำหรับภาพตามคุณภาพimage.JPEG_SUBSAMPLING_444: ใช้การ subsampling แบบ 4:4:4image.JPEG_SUBSAMPLING_422: ใช้การ subsampling แบบ 4:2:2image.JPEG_SUBSAMPLING_420: ใช้การ subsampling แบบ 4:2:0
คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์
.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-placecopy_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-placecopy_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) ที่จะบันทึก หากไม่ระบุ จะเท่ากับสี่เหลี่ยมภาพซึ่งคัดลอกภาพทั้งหมด อาร์กิวเมนต์นี้ใช้ไม่ได้กับภาพ JPEGqualityคือคุณภาพการบีบอัด jpeg ที่ใช้บันทึกภาพเป็นรูปแบบ jpeg หากภาพยังไม่ได้บีบอัด (0-100) (int)คืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์
.
เมธอดการวาด¶
- 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 สำหรับภาพ RGB565thicknessควบคุมความหนาของเส้นเป็นพิกเซลคืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์
.ไม่รองรับภาพที่บีบอัดหรือภาพ 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 สำหรับภาพ RGB565thicknessควบคุมความหนาของเส้นเป็นพิกเซลส่ง
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 สำหรับภาพ RGB565thicknessควบคุมความหนาของขอบเป็นพิกเซลส่ง
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 สำหรับภาพ RGB565thicknessควบคุมความหนาของขอบเป็นพิกเซลส่ง
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 สำหรับภาพ RGB565scaleอาจเพิ่มขึ้นเพื่อเพิ่ม/ลดขนาดข้อความบนภาพ คุณสามารถส่งค่า integer หรือ floating point ที่มากกว่า 0x_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 สำหรับภาพ RGB565sizeควบคุมความยาวของเส้นกากบาท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 สำหรับภาพ RGB565thicknessควบคุมความหนาของเส้นเป็นพิกเซลคืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์
.ไม่รองรับภาพที่บีบอัดหรือภาพ 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.cornerscorners เป็น tuple สี่ค่าของ tuple x/y สองค่า เช่น [(x1,y1),(x2,y2),(x3,y3),(x4,y4)]colorเป็น tuple RGB888 สำหรับภาพ Grayscale หรือ RGB565 ค่าเริ่มต้นเป็นสีขาว อย่างไรก็ตาม คุณยังสามารถส่งค่าพิกเซลพื้นฐาน (0-255) สำหรับภาพระดับสีเทาหรือค่า RGB565 สำหรับภาพ RGB565sizeหากมากกว่า 0 ทำให้มุมถูกวาดเป็นวงกลมรัศมีsizethicknessควบคุมความหนาของเส้นเป็นพิกเซลส่ง
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 สำหรับภาพ RGB565sizeควบคุมขนาดของ keypointsthicknessควบคุมความหนาของเส้นเป็นพิกเซลส่ง
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พิกเซลจะได้รับการลบ-contrastTrigger event จะถูกละเว้น ค่าพิกเซลถูก clamp ที่ 0-255clearหากเป็น 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
เมธอดไบนารี¶
- 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=Truecopyหากเป็น 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หลังจาก normalizationbrightnessใช้pixel + brightnessหลังจาก normalizationคืนค่าวัตถุภาพเพื่อให้คุณสามารถเรียกเมธอดอื่นด้วยสัญลักษณ์
.ไม่รองรับภาพที่บีบอัดหรือภาพ bayer/yuv
เมธอดคณิตศาสตร์¶
- 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-blendimageเข้ากับภาพนี้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.5thresholdหากเป็น 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)elementskernelคือ kernel ที่จะ convolve ด้วย เป็น flat 1D list/tuple ของ((size*2)+1)*((size*2)+1)elements หรือ 2D list/tuple ที่มี((size*2)+1)แถวของ((size*2)+1)elementsmulคือ 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.0x_corroffset พิกเซล floating point จากศูนย์กลาง สามารถเป็นลบหรือบวกy_corroffset พิกเซล 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.0fovคือ field-of-view ที่ใช้สำหรับการฉาย 2D->3D ภายใน เมื่อfovเข้าใกล้ 0 ภาพจะถูกวางที่ infinity เมื่อเข้าใกล้ 180 ภาพจะถูกวางภายใน viewportcornersเป็นรายการ 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.similarityimageคือภาพที่จะเปรียบเทียบ (วัตถุภาพหรือสตริงเส้นทาง เช่น"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)สำหรับภาพ RGB565invertกลับด้านการจับคู่ค่าขีดแบ่งroiเป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพx_strideและy_strideควบคุมจำนวนพิกเซลที่ข้ามขณะประเมินภาพarea_thresholdพื้นที่กรอบขอบเขตขั้นต่ำ ผลลัพธ์ที่เล็กกว่าจะคืนค่า Nonepixels_thresholdจำนวนพิกเซลที่ผ่านค่าขีดแบ่งขั้นต่ำ ผลลัพธ์ที่น้อยกว่าจะคืนค่า Nonetarget_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.blobthresholdsเป็นรายการ 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.lineroiเป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพx_strideและy_strideควบคุมจำนวนพิกเซลที่ข้ามระหว่าง hough transformthresholdขนาดเส้นขั้นต่ำ (ผลรวมขนาด 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.lineroiเป็น 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.circleroiเป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพx_strideและy_strideควบคุมจำนวนพิกเซลที่ข้ามระหว่าง hough transformthresholdขนาดวงกลมขั้นต่ำ (ผลรวมขนาด sobel ตามวงกลม) วงกลมที่ต่ำกว่านี้จะถูกกรองออกx_margin,y_margin, และr_marginควบคุมการรวม วงกลมที่อยู่ในค่าขีดแบ่งเหล่านี้จะถูกรวมกันr_minรัศมีวงกลมขั้นต่ำ ค่าเริ่มต้น 2r_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.rectroiเป็น 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.qrcoderoiเป็น 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.apriltagroiเป็น 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.datamatrixroiเป็น 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.CODE128roiเป็น 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.displacementroiเป็นสี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพtemplate_roiคือ region-of-interest ของ template ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพ templateroiและtemplate_roiต้องมีความกว้างและความสูงเท่ากันlogpolarหากเป็น True คืนค่าการเปลี่ยนแปลงการหมุน/scale แทน translation x/yfix_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) หรือ Nonetemplateคือภาพระดับสีเทาที่จะจับคู่กับภาพนี้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-positivescaleต้องมากกว่า 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()เพื่อเปรียบเทียบสอง descriptorsroiเป็น 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 หากไม่พบ keypointsroiเป็น tuple สี่เหลี่ยม (x, y, w, h) ของบริเวณที่สนใจ (ROI) ค่าเริ่มต้นเป็นสี่เหลี่ยมภาพthreshold(0-255) ควบคุมจำนวน corners ที่ดึงได้ ค่าขีดแบ่งต่ำกว่าได้ corners มากกว่า ใช้ ~20 สำหรับ AGAST, ~60-80 สำหรับ FASTnormalizedหากเป็น True จะปิดการดึง keypoints แบบ multi-resolutionscale_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(threshold: int = 500, size: int = 20, a1: float = 1.0, a2: float = 1.0, a3: float = 1.0) List[Tuple[int, int, int, int]]¶
รัน selective search บนภาพและคืนค่ารายการ bounding box tuple (x, y, w, h) ของข้อเสนอวัตถุ
thresholdคือค่าขีดแบ่งการแบ่งส่วน ค่าสูงกว่าให้บริเวณที่น้อยกว่า/ใหญ่กว่าsizeคือขนาดบริเวณขั้นต่ำหลังการรวมa1,a2,a3คือน้ำหนักความเหมือนสี/พื้นผิว/ขนาดที่ใช้เมื่อรวมบริเวณ