class Image -- 影像物件¶
Image 是 image 模組的核心資料型別——一個記憶體內的像素緩衝區,所有繪製常式、所有濾鏡、所有幾何變換以及所有特徵擷取常式都在其上運作。從 csi.CSI.snapshot() 取得的每一個影格都是 Image;從磁碟載入、由 JPEG 或 PNG 解碼、從 numpy 風格的 ndarray 配置而來,或建構為空白繪圖畫布的每一個影格也同樣如此。
Image 由三個數字——width、height 與 pixformat——加上一段連續的像素緩衝區所描述。像素格式同時決定了記憶體內的排列方式以及可用的操作:
BINARY (1 bpp)——每像素 1 位元;供形態學運算與閾值化使用。
GRAYSCALE (8 bpp)——每像素 1 位元組;是大多數電腦視覺運算(AprilTag、邊緣、ORB、光流)的標準格式。
RGB565 (16 bpp)——每像素 2 位元組(5R/6G/5B);預設的色彩格式。
BAYER (8 bpp)——直接來自感測器的原始 Bayer 馬賽克資料。大多數電腦視覺方法無法用於 Bayer 影像;請先去馬賽克(debayer)為 GRAYSCALE / RGB565。
YUV422 (16 bpp)——4:2:2 色度次取樣的色彩格式,每像素兩個位元組。只有部分方法能直接在 YUV422 上運作。
JPEG / PNG——壓縮的緩衝區。進行像素層級的操作前需先呼叫
to_grayscale()或to_rgb565()。
Image 物件的來源¶
取得 Image 有四種方式:
從相機影格緩衝區——
csi.CSI().snapshot()會回傳下一個擷取到的影格。回傳的物件是對相機影格緩衝區記憶體的輕量包裝,因此對其進行任何繪製 / 濾鏡操作都會改變傳送到 IDE 預覽與顯示器的內容。從檔案——將路徑字串傳給
Image建構式。BMP、PGM、PPM、JPEG 與 PNG 會直接解碼到 RAM(若copy_to_fb=True則解碼到相機影格緩衝區)。從 ndarray——傳入
(h, w)或(h, w, 3)的 float32 陣列。像素值會分別從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.
索引、長度、迭代與類位元組存取¶
索引——
img[i]讀取像素i(以列為主、線性方式)。img[i] = value寫入該像素。灰階 / Bayer 像素為 8 位元整數,RGB565 / YUV422 像素為 16 位元打包整數,二值像素為 0 / 1。對於 JPEG / PNG 影像,索引空間是壓縮的位元組串流,而非像素。長度——對於未壓縮格式,
len(img)回傳像素數量;對於壓縮格式則回傳位元組數。迭代——
for px in img: ...會以與[]索引相同的順序走訪像素陣列。類位元組——
Image公開了讀取緩衝區協定,因此你可以將它直接傳給任何接受bytes/bytearray的對象(例如uart.write(img)、socket.send(img)、hashlib.sha256(img))。若需取得可讀寫的檢視,請改用bytearray()。
提示旗標¶
許多 Image 方法接受 hint 引數,它是以下旗標的邏輯 OR:
image.AREA:縮小時使用區域縮放,而非預設的最近鄰插值。
image.BILINEAR:使用雙線性縮放,而非預設的最近鄰縮放。
image.BICUBIC:使用雙三次縮放,而非預設的最近鄰縮放。
image.CENTER:將繪製的影像置於顯示器中央。此項在縮放之後套用。
image.HMIRROR:水平鏡像影像。
image.VFLIP:垂直翻轉影像。
image.TRANSPOSE:轉置影像(交換 x/y)。
image.EXTRACT_RGB_CHANNEL_FIRST:在縮放之前先進行 rgb_channel 擷取。
image.APPLY_COLOR_PALETTE_FIRST:在縮放之前先套用色彩調色盤。
image.SCALE_ASPECT_KEEP:縮放繪製的影像使其容納於顯示器內。
image.SCALE_ASPECT_EXPAND:縮放繪製的影像使其填滿顯示器(會造成裁切)。
image.SCALE_ASPECT_IGNORE:縮放繪製的影像使其填滿顯示器(會造成拉伸)。
image.ROTATE_90:將影像旋轉 90 度(這只是 VFLIP | TRANSPOSE)。
image.ROTATE_180:將影像旋轉 180 度(這只是 HMIRROR | VFLIP)。
image.ROTATE_270:將影像旋轉 270 度(這只是 HMIRROR | TRANSPOSE)。
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為真,影像會被複製到影格緩衝區,而非配置於堆積上。若
arg是ndarray,則此項會從該ndarray建立一個新的影像物件。形狀為(w, h)的ndarray物件會被視為灰階影像,(w, h, 3)則被視為 RGB565 影像。目前僅支援 float32 浮點的ndarrays。以此方式建立影像時,若你傳入buffer引數,它會被用來儲存影像資料,而非在堆積上配置空間。若copy_to_fb為真,影像會被複製到影格緩衝區,而非配置於堆積上或使用buffer。若
arg是int,則它會被視為新影像的寬度,且後面必須接著一個height值與一個format值來建立新的空白影像物件。format可以是任何影像 pixformat 值,例如image.GRAYSCALE。影像會被初始化為全零。請注意,壓縮影像格式需要buffer值。以此方式建立影像時,buffer會被視為影像資料的來源。若與copy_to_fb一起使用,buffer的資料會被複製到影格緩衝區。若你想從 JPEGbytes()或bytearray()物件建立 JPEG 影像,可傳入 JPEG 的width、height、image.JPEG,並將buffer設為 JPEG 位元組串流以建立 JPEG 影像。影像支援「[]」標記法。使用
image[index] = 8/16-bit value來指派影像像素,或使用image[index]來取得影像像素;對於灰階/bayer 影像會是 8 位元值,對於 RGB565/YUV 影像會是 16 位元值。二值影像則回傳 1 位元值。對於 JPEG 影像,「[]」可讓你以位元組陣列的形式存取壓縮的 JPEG 影像 blob。但對該資料陣列的讀寫是不透明的,因為 JPEG 影像是壓縮的位元組串流。
影像也支援讀取緩衝區操作。你可以將影像傳給各種 MicroPython 函式,就如同影像是位元組陣列物件一樣。特別是,若你想傳輸影像,只需將它傳給 UART/SPI/I2C 寫入函式即可自動傳輸。
基本方法¶
- format() int¶
對灰階影像回傳
image.GRAYSCALE,對 RGB565 影像回傳image.RGB565,對 bayer 樣式影像回傳image.BAYER,對 JPEG 影像回傳image.JPEG。
- bytearray() bytearray¶
回傳一個指向影像資料的
bytearray物件,用於位元組層級的讀/寫存取。備註
當影像物件被傳給需要
bytes類物件的 MicroPython 驅動程式時,會自動被轉型為bytes物件。這是唯讀存取。呼叫bytearray()以取得讀/寫存取。
- get_pixel(x: int, y: int, rgbtuple: bool | None = None) int | Tuple[int, int, int]¶
對於灰階影像:回傳位置 (x, y) 的灰階像素值。對於 RGB565 影像:回傳位置 (x, y) 的 RGB888 像素元組 (r, g, b)。對於 bayer 樣式影像:回傳位置 (x, y) 的像素值。
若
x或y在影像範圍之外則回傳 None。x與y可以分別傳入,或以元組形式傳入。rgbtuple若為 True 會使此方法回傳 RGB888 元組。否則,此方法回傳底層像素的整數值。亦即對於 RGB565 影像,此方法回傳 RGB565 值。對於 RGB565 影像預設為 True,其餘情況預設為 False。不支援壓縮影像。
備註
Image.get_pixel()與Image.set_pixel()是唯一能讓你操作 bayer 樣式影像的方法。Bayer 樣式影像是字面上的影像,其中偶數列的像素為 R/G/R/G/…,奇數列為 G/B/G/B/…。每個像素為 8 位元。若你在呼叫此方法時設定了rgbtuple,則Image.get_pixel()會在該像素位置對來源影像去馬賽克,並回傳該像素位置有效的 RGB888 元組。
- set_pixel(x: int, y: int, pixel: int | Tuple[int, int, int]) Image¶
對於灰階影像:將位置 (x, y) 的像素設為灰階值
pixel。對於 RGB565 影像:將位置 (x, y) 的像素設為 RGB888 元組 (r, g, b)pixel。對於 bayer 樣式影像:將位置 (x, y) 的像素值設為pixel。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。x與y可以分別傳入,或以元組形式傳入。pixel可以是 RGB888 元組 (r, g, b) 或底層像素值(亦即對 RGB565 影像為 RGB565 值,對灰階影像為 8 位元值)。不支援壓縮影像。
備註
Image.get_pixel()與Image.set_pixel()是唯一能讓你操作 bayer 樣式影像的方法。Bayer 樣式影像是字面上的影像,其中偶數列的像素為 R/G/R/G/…,奇數列為 G/B/G/B/…。每個像素為 8 位元。若你在呼叫此方法時傳入 RGB888 元組,則會擷取該 RGB888 元組的灰階值並設定到該像素位置。
轉換方法¶
- to_ndarray(dtype: str, buffer: bytes | bytearray | memoryview | None = None) ndarray¶
回傳一個從影像建立的
ndarray物件。目前僅適用於 GRAYSCALE 或 RGB565 影像。dtype可以是b、B或f,分別用於建立有號 8 位元、無號 8 位元或 32 位元浮點的ndarray。GRAYSCALE 影像會直接轉換為無號 8 位元ndarray物件。對於有號 8 位元ndarray物件,值 (0:255) 會被對應到 (-127:128)。對於浮點 32 位元ndarray物件,值會被對應到 (0.0:255.0)。RGB565 影像會被轉換為 3 通道ndarray物件,並依dtype對每個通道套用上述針對 GRAYSCALE 影像所描述的相同程序。請注意,dtype也接受b、B與f各自的整數值(例如ord())。buffer若不為None,則為用作ndarray緩衝區的bytearray物件。若為None,則會在堆積上配置一個新緩衝區來儲存ndarray影像資料。你可以使用buffer引數直接在預先配置的緩衝區中配置ndarray,省去一次堆積配置與一次複製操作。回傳的
ndarray對於 GRAYSCALE 影像具有(height, width)的形狀,對於 RGB565 影像具有(height, width, 3)的形狀。
- 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¶
將影像轉換為點陣圖影像(每像素 1 位元)。
x_scale控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。copy_to_fb若為 True,影像會被直接載入影格緩衝區。copy_to_fb的優先權高於copy。若影像已在影格緩衝區中則無特殊效果。備註
點陣圖影像就像灰階影像,但只有兩種像素值——0 與 1。此外,點陣圖影像經過打包,因此每像素僅儲存 1 位元,使其非常小。OpenMV 影像函式庫允許在所有可使用
sensor.GRAYSCALE與sensor.RGB565影像的場合使用點陣圖影像。然而,許多操作套用於點陣圖影像時並無意義,因為點陣圖影像只有 2 種值。OpenMV 建議在操作中將點陣圖影像用於mask值之類的用途,因為它們很容易容納於 MicroPython 堆積上。最後,當套用於sensor.GRAYSCALE或sensor.RGB565影像時,點陣圖影像的像素值 0 與 1 會被解讀為黑色與白色。函式庫會自動處理轉換。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。
- 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控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。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控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。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¶
將影像轉換為 RGB565 彩虹影像(每像素 16 位元)。
x_scale控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。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¶
將影像轉換為 RGB565 鐵紅熱像影像(每像素 16 位元)。
x_scale控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。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¶
將影像轉換為 RGB565 深度影像(每像素 16 位元)。
x_scale控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是image.PALETTE_DEPTH,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。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¶
將影像轉換為 RGB565 暗事件影像(每像素 16 位元)。
x_scale控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。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¶
將影像轉換為 RGB565 亮事件影像(每像素 16 位元)。
x_scale控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。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控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。copy_to_fb若為 True,影像會被直接載入影格緩衝區。copy_to_fb的優先權高於copy。若影像已在影格緩衝區中則無特殊效果。quality控制 jpeg 影像壓縮品質。值可介於 0 與 100 之間。subsampling可以是:image.JPEG_SUBSAMPLING_AUTO:根據品質為影像使用最佳的次取樣。image.JPEG_SUBSAMPLING_444:使用 4:4:4 次取樣。image.JPEG_SUBSAMPLING_422:使用 4:2:2 次取樣。image.JPEG_SUBSAMPLING_420:使用 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控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。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控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。copy_to_fb若為 True,影像會被直接載入影格緩衝區。copy_to_fb的優先權高於copy。若影像已在影格緩衝區中則無特殊效果。quality控制 jpeg 影像壓縮品質。值可介於 0 與 100 之間。subsampling可以是:image.JPEG_SUBSAMPLING_AUTO:根據品質為影像使用最佳的次取樣。image.JPEG_SUBSAMPLING_444:使用 4:4:4 次取樣。image.JPEG_SUBSAMPLING_422:使用 4:2:2 次取樣。image.JPEG_SUBSAMPLING_420:使用 4:2:0 次取樣。
回傳影像物件,以便你能使用
.標記法呼叫另一個方法。備註
Image.compress是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¶
建立影像物件的深層複本。
x_scale控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 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¶
就地修改影像,而不變更底層的影像型別。
x_scale控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。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¶
就地修改影像,而不變更底層的影像型別。
x_scale控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(不含此處不支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 OpenMV Cam N6 支援,因為它具有可用硬體完成此運算的 GPU。copy若為 True,會在堆積上建立已轉換影像的深層複本,而非就地轉換原始影像。copy_to_fb若為 True,影像會被直接載入影格緩衝區。copy_to_fb的優先權高於copy。若影像已在影格緩衝區中則無特殊效果。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。備註
Image.scale是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)。若未指定,則等於影像矩形,即複製整張影像。此引數不適用於 JPEG 影像。quality是當影像尚未壓縮時,用來將影像儲存為 jpeg 格式的 jpeg 壓縮品質 (0-100)(int)。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。
繪製方法¶
- clear(mask: Image | None = None) Image¶
將影像中所有像素設為零(非常快速)。
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,或以元組 (x0, y0, x1, y1) 傳入。
color對於灰階或 RGB565 影像是 RGB888 元組。預設為白色。然而,你也可以傳入灰階影像的底層像素值 (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,或以元組 (x, y, w, h) 傳入。
color對於灰階或 RGB565 影像是 RGB888 元組。預設為白色。然而,你也可以傳入灰階影像的底層像素值 (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,或以元組 (x, y, radius) 傳入。
color對於灰階或 RGB565 影像是 RGB888 元組。預設為白色。然而,你也可以傳入灰階影像的底層像素值 (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 與旋轉角度(度數),或以元組 (cx, yc, rx, ry, rotation) 傳入。
color對於灰階或 RGB565 影像是 RGB888 元組。預設為白色。然而,你也可以傳入灰階影像的底層像素值 (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¶
在影像中從位置 (x, y) 開始繪製 8x10 文字。你可以分別傳入 x、y,或以元組 (x, y) 傳入。
text是要寫入影像的字串。\n、\r與\r\n行尾會將游標移到下一行。color對於灰階或 RGB565 影像是 RGB888 元組。預設為白色。然而,你也可以傳入灰階影像的底層像素值 (0-255) 或 RGB565 影像的 RGB565 值。scale可加大以增大/縮小影像上文字的大小。你可以傳入大於 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,或以元組 (x, y) 傳入。
color對於灰階或 RGB565 影像是 RGB888 元組。預設為白色。然而,你也可以傳入灰階影像的底層像素值 (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,或以元組 (x0, y0, x1, y1) 傳入。
color對於灰階或 RGB565 影像是 RGB888 元組。預設為白色。然而,你也可以傳入灰階影像的底層像素值 (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 元組(rx, ry, rw, rh, cx, cy),描述一個邊界矩形與一個質心(通常由神經網路或色彩追蹤程式碼回傳)。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 是一個由兩值 x/y 元組組成的四值元組。例如 [(x1,y1),(x2,y2),(x3,y3),(x4,y4)]。color對於灰階或 RGB565 影像是 RGB888 元組。預設為白色。然而,你也可以傳入灰階影像的底層像素值 (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¶
繪製一張左上角起於位置 x, y 的
image。你可以分別傳入 x、y,或以元組 (x, y) 傳入。此方法會自動處理將傳入的影像渲染為目標影像的正確像素格式,同時無縫處理裁切。你也可以為此方法傳入路徑而非影像物件,以一步自動從磁碟載入影像並使用它。例如
draw_image("test.jpg")。x_scale控制顯示影像在 x 方向上的縮放程度(浮點)。若此值為負,影像會被水平翻轉。請注意,若未指定y_scale,則它會與x_scale一致以維持長寬比。y_scale控制顯示影像在 y 方向上的縮放程度(浮點)。若此值為負,影像會被垂直翻轉。請注意,若未指定x_scale,則它會與x_scale一致以維持長寬比。roi是來源影像要繪製的感興趣區域矩形元組 (x, y, w, h)。這讓你能僅擷取 ROI 內的像素來縮放並繪製到目標影像上。rgb_channel是要從 RGB565 影像(若有傳入)擷取並渲染到目標影像上的 RGB 通道(0=R、1=G、2=B)。例如,若你傳入rgb_channel=1,這會擷取來源 RGB565 影像的綠色通道並以灰階繪製到目標影像上。alpha控制要將多少來源影像混合到目標影像中。值為 255 會繪製不透明的來源影像,而低於 255 的值會在來源與目標影像之間產生混合。0 則表示不修改目標影像。color_palette若不為None,可以是色彩調色盤列舉值,或一個總計 256 像素的 RGB565 影像,用作對來源影像(無論其格式)灰階值的色彩查找表。若有使用rgb_channel擷取,則此項在其後套用。alpha_palette若不為None,可以是一個總計 256 像素的 GRAYSCALE 影像,用作 alpha 調色盤,以在像素層級調變所繪製來源影像的alpha值,讓你能根據像素的灰階值精確控制其 alpha 值。alpha 查找表中值為 255 的像素為不透明,任何低於 255 的值則越趨透明,直到 0。若有使用rgb_channel擷取,則此項在其後套用。hint是 提示旗標 中所列旗標的邏輯 OR(含此處支援的image.BLACK_BACKGROUND)。transform是用來對影像執行透視變換的 3x3ndarray。目前僅 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 物件的關鍵點。你也可以傳入一個由三值元組 (x, y, rotation_angle_in_degrees) 組成的列表,以重複利用此方法繪製關鍵點符號,亦即一個帶有指向特定方向之線條的圓形。
color對於灰階或 RGB565 影像是 RGB888 元組。預設為白色。然而,你也可以傳入灰階影像的底層像素值 (0-255) 或 RGB565 影像的 RGB565 值。size控制關鍵點的大小。thickness控制線條的粗細(像素)。將
fill設為 True 以填滿關鍵點。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 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,或以元組 (x, y) 傳入。
seed_threshold控制填充區域中任何像素與原始起始像素的差異可達多少。floating_threshold控制填充區域中任何像素與任何相鄰像素的差異可達多少。color對於灰階或 RGB565 影像是 RGB888 元組。預設為白色。然而,你也可以傳入灰階影像的底層像素值 (0-255) 或 RGB565 影像的 RGB565 值。將
invert傳為 True 以重新著色漫水填充連通區域以外的所有部分。將
clear_background傳為 True 以將漫水填充未重新著色的其餘像素歸零。mask是用作此操作之像素層級遮罩的另一張影像。遮罩應為僅含黑色或白色像素的影像,且應與被操作的影像大小相同。漫水填充時只有遮罩中被設定的像素才會被評估。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer 影像。
OpenMV Cam M4 上不提供此方法。
- draw_event_histogram(array: ndarray, clear: bool = True, brightness: int = 128, contrast: int = 16) Image¶
將事件 ndarray(由
csi.IOCTL_GENX320_READ_EVENTS填入)光柵化到Image上以供視覺化。影像緩衝區必須是 320x320 GRAYSCALE 影像。對於每個
csi.PIX_ON_EVENT列,該事件的像素會被加上+contrast;對於每個csi.PIX_OFF_EVENT列,該像素會被加上-contrast。觸發事件會被忽略。像素值會被箝制在 0-255。clear若為 True,會在繪製前將影像緩衝區重設為brightness——每個影格都成為全新的純事件渲染。設為 False 則跨多次呼叫累積事件(對長曝光的運動軌跡很有用)。brightness控制當clear為 True 時緩衝區所重設到的中灰基準值。預設 128 會將 ON 事件置於亮端、OFF 事件置於暗端,並具有相等的餘裕。contrast控制每個事件對其像素的偏移量——較高的值會讓事件更突出,但代價是當許多事件落在同一像素上時會迅速飽和。
遮罩方法¶
- 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¶
依據每個像素是否落在
thresholds中其中一個閾值元組內,將影像中所有像素設為黑色或白色。thresholds對於灰階影像是(lo, hi)元組的列表,對於 RGB565 影像是(l_lo, l_hi, a_lo, a_hi, b_lo, b_hi)元組的列表。對調的最小/最大值會被自動修正;缺少的分量預設為最大範圍。invert反轉閾值匹配。zero若為 True,會將通過閾值的像素歸零並保留其餘像素不變。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。to_bitmap若為 True,會將影像資料轉換為每像素 1 位元的點陣圖。對於非常小的影像,這可能需要copy=True。copy若為 True,會在堆積上回傳一張新影像,而非修改來源影像。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer 影像。
- invert() Image¶
反轉影像中所有像素值(每個 8 位元通道的像素變成
255 - pixel)。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer/yuv 影像。
- b_and(image: Image, mask: Image | None = None) Image¶
將此影像與另一張影像進行邏輯 AND。
image可以是影像物件、未壓縮影像檔的路徑 (bmp/pgm/ppm),或純量值(RGB888 元組或底層像素值)。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer 影像。
- b_nand(image: Image, mask: Image | None = None) Image¶
將此影像與另一張影像進行邏輯 NAND。
image可以是影像物件、未壓縮影像檔的路徑 (bmp/pgm/ppm),或純量值(RGB888 元組或底層像素值)。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer 影像。
- b_or(image: Image, mask: Image | None = None) Image¶
將此影像與另一張影像進行邏輯 OR。
image可以是影像物件、未壓縮影像檔的路徑 (bmp/pgm/ppm),或純量值(RGB888 元組或底層像素值)。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer 影像。
- b_nor(image: Image, mask: Image | None = None) Image¶
將此影像與另一張影像進行邏輯 NOR。
image可以是影像物件、未壓縮影像檔的路徑 (bmp/pgm/ppm),或純量值(RGB888 元組或底層像素值)。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer 影像。
ISP 方法¶
- awb(max: bool = False) Image¶
使用灰世界(gray-world)演算法對影像執行自動白平衡。可在 RAW Bayer 或 RGB565 影像上運作。對二值/灰階影像無效。
max若為 True,改用白塊(white-patch)演算法。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 yuv 影像。
- ccm(matrix: List[List[float]]) Image¶
將傳入的浮點色彩校正矩陣與影像相乘。矩陣可為 3x3 或 3x4(含偏移欄),以巢狀列表或扁平列表形式表示:
[[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 影像。
數學方法¶
- negate() Image¶
Image.invert的別名。
- replace(image: Image | None = None, **kwargs) Image¶
Image.draw_image()的別名。以image取代此影像(若省略image則就地變換此影像),並使用標準的draw_image關鍵字引數。transform引數是描述透視變換的 3x3ndarray(僅在啟用 ULAB 的 OpenMV 相機上支援)。
- assign(image: Image | None = None, **kwargs) Image¶
Image.replace()的別名。
- set(image: Image | None = None, **kwargs) Image¶
Image.replace()的別名。
- add(image: Image, mask: Image | None = None) Image¶
將一張影像以像素為單位加到此影像上。
image可以是影像物件、未壓縮影像檔的路徑 (bmp/pgm/ppm),或純量值(RGB888 元組或底層像素值)。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer 影像。
- sub(image: Image, mask: Image | None = None) Image¶
將
image以像素為單位從此影像中減去(self - image)。image可以是影像物件、未壓縮影像檔的路徑 (bmp/pgm/ppm),或純量值(RGB888 元組或底層像素值)。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¶
反向相減:以像素為單位將此影像取代為
image - self。其餘與Image.sub()相同。
- min(image: Image, mask: Image | None = None) Image¶
以像素為單位回傳兩張影像的最小值影像。
image可以是影像物件、未壓縮影像檔的路徑 (bmp/pgm/ppm),或純量值(RGB888 元組或底層像素值)。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer 影像。
- max(image: Image, mask: Image | None = None) Image¶
以像素為單位回傳兩張影像的最大值影像。
image可以是影像物件、未壓縮影像檔的路徑 (bmp/pgm/ppm),或純量值(RGB888 元組或底層像素值)。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer 影像。
- difference(image: Image, mask: Image | None = None) Image¶
回傳兩張影像之間以像素為單位的絕對差影像(例如 ||a-b||)。
image可以是影像物件、未壓縮影像檔的路徑 (bmp/pgm/ppm),或純量值(RGB888 元組或底層像素值)。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer 影像。
- blend(image: Image, x: int = 0, y: int = 0, alpha: int = 128, mask: Image | None = None, **kwargs) Image¶
Image.draw_image()的別名。將image以 alpha 混合方式融入此影像。alpha是 0-256 的整數;越接近 256 越偏向來源影像。接受所有Image.draw_image()關鍵字引數。
濾波方法¶
- erode(size: int, threshold: int | None = None, mask: Image | None = None) Image¶
從分割區域的邊緣移除像素。在影像上卷積一個
((size*2)+1)x((size*2)+1)的核,若有超過threshold個相鄰像素為清除狀態,則清除中央像素(當threshold為 None 時作為標準腐蝕運算)。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer/yuv 影像。
- dilate(size: int, threshold: int | None = None, mask: Image | None = None) Image¶
在分割區域的邊緣加上像素。在影像上卷積一個
((size*2)+1)x((size*2)+1)的核,若有超過threshold個相鄰像素為設定狀態,則設定中央像素(當threshold為 None 時作為標準膨脹運算)。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer/yuv 影像。
- open(size: int, threshold: int | None = None, mask: Image | None = None) Image¶
先腐蝕後膨脹。參見
Image.erode()與Image.dilate()。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。不支援壓縮影像或 bayer/yuv 影像。
- close(size: int, threshold: int | None = None, mask: Image | None = None) Image¶
先膨脹後腐蝕。參見
Image.dilate()與Image.erode()。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。不支援壓縮影像或 bayer/yuv 影像。
- top_hat(size: int, threshold: int | None = None, mask: Image | None = None) Image¶
回傳影像與經
Image.open()處理後影像之間的影像差。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。不支援壓縮影像或 bayer/yuv 影像。
- black_hat(size: int, threshold: int | None = None, mask: Image | None = None) Image¶
回傳影像與經
Image.close()處理後影像之間的影像差。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。不支援壓縮影像或 bayer/yuv 影像。
- mean(size: int, threshold: bool | None = False, offset: int | None = 0, invert: bool | None = False, mask: Image | None = None) Image¶
使用方框濾波器的標準均值模糊濾鏡。
size是核大小。使用 1(3x3 核)、2(5x5 核)等。threshold若為 True,會自適應地將濾鏡輸出閾值化為二值影像。offset移動二值化結果(負值使更多像素變白,正值使更少像素變白)。invert反轉二值輸出。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¶
對影像執行百分位數濾鏡(預設為中值)。
size是核大小。使用 1(3x3 核)、2(5x5 核)等。percentile是要從每個核中選取的百分位數(0 = 最小、0.5 = 中值、1.0 = 最大)。預設為 0.5。threshold若為 True,會自適應地將濾鏡輸出閾值化為二值影像。offset移動二值化結果(負值使更多像素變白,正值使更少像素變白)。invert反轉二值輸出。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer/yuv 影像。
- mode(size: int, threshold: bool | None = False, offset: int | None = 0, invert: bool | None = False, mask: Image | None = None) Image¶
以每個像素鄰域的眾數取代該像素。由於此非線性操作,可能在 RGB 影像邊緣產生假影。
size是核大小。使用 1(3x3 核)、2(5x5 核)等。threshold若為 True,會自適應地將濾鏡輸出閾值化為二值影像。offset移動二值化結果(負值使更多像素變白,正值使更少像素變白)。invert反轉二值輸出。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¶
對影像執行中點濾鏡。此濾鏡會求出影像中每個像素鄰域的中點 ((max-min)/2)。
size是核大小。使用 1(3x3 核)、2(5x5 核)等。bias控制最小/最大的混合。0 表示僅最小值濾波,1.0 表示僅最大值濾波。透過bias你可以對影像進行最小/最大濾波。threshold若為 True,會自適應地將濾鏡輸出閾值化為二值影像。offset移動二值化結果(負值使更多像素變白,正值使更少像素變白)。invert反轉二值輸出。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¶
以任意的濾波核對影像進行卷積。
size控制核大小,必須為((size*2)+1)x((size*2)+1)個元素。kernel是要卷積的核,為含((size*2)+1)*((size*2)+1)個元素的扁平 1D 列表/元組,或為含((size*2)+1)列、每列((size*2)+1)個元素的 2D 列表/元組。mul是乘法式的對比縮放(預設 1.0)。add是加法式的亮度偏移(預設 0.0)。threshold若為 True,會自適應地將濾鏡輸出閾值化為二值影像。offset移動二值化結果(負值使更多像素變白,正值使更少像素變白)。invert反轉二值輸出。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¶
以平滑高斯核對影像進行卷積。
size是核大小。使用 1(3x3 核)、2(5x5 核)等。unsharp若為 True,會執行 unsharp 遮罩操作(銳化邊緣)而非單純的高斯模糊。mul是乘法式的對比縮放(預設 1.0)。add是加法式的亮度偏移(預設 0.0)。threshold若為 True,會自適應地將濾鏡輸出閾值化為二值影像。offset移動二值化結果(負值使更多像素變白,正值使更少像素變白)。invert反轉二值輸出。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¶
以邊緣偵測的拉普拉斯核對影像進行卷積。
size是核大小。使用 1(3x3 核)、2(5x5 核)等。sharpen若為 True,會銳化影像而非輸出原始未閾值化的邊緣響應。mul是乘法式的對比縮放(預設 1.0)。add是加法式的亮度偏移(預設 0.0)。threshold若為 True,會自適應地將濾鏡輸出閾值化為二值影像。offset移動二值化結果(負值使更多像素變白,正值使更少像素變白)。invert反轉二值輸出。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¶
以雙邊濾波器(保留邊緣的平滑)對影像進行卷積。
size是核大小。使用 1(3x3 核)、2(5x5 核)等。color_sigma控制色彩匹配容忍度;值越大產生越多色彩模糊。space_sigma控制空間模糊;值越大產生越多像素模糊。threshold若為 True,會自適應地將濾鏡輸出閾值化為二值影像。offset移動二值化結果(負值使更多像素變白,正值使更少像素變白)。invert反轉二值輸出。mask是用作像素層級遮罩的二值影像;只有遮罩中被設定的像素才會被修改。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 bayer/yuv 影像。
幾何方法¶
- linpolar(reverse: bool = False, *, x: int | None = None, y: int | None = None) Image¶
將影像從笛卡兒座標重新投影為線性極座標。
設定
reverse=True以反方向重新投影。x與y以影像像素指定變換的中心座標。若x為None(預設),則設為影像寬度的一半;同樣地y預設為影像高度的一半。線性極座標重新投影會將影像的旋轉轉換為 x 方向的平移。
不支援壓縮影像或 bayer 影像。
OpenMV Cam M4 上不提供此方法。
- logpolar(reverse: bool = False, *, x: int | None = None, y: int | None = None) Image¶
將影像從笛卡兒座標重新投影為對數極座標。
設定
reverse=True以反方向重新投影。x與y以影像像素指定變換的中心座標。若x為None(預設),則設為影像寬度的一半;同樣地y預設為影像高度的一半。對數極座標重新投影會將影像的旋轉轉換為 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¶
執行鏡頭校正以消除因鏡頭畸變造成的影像魚眼效果。
strength是定義消除影像魚眼程度的浮點數。先試試預設的 1.8,然後從那裡增加或減少,直到影像看起來良好。zoom是對影像放大的量。預設為 1.0。x_corr自中心起算的浮點像素偏移。可為負或正。y_corr自中心起算的浮點像素偏移。可為負或正。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 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¶
藉由對影格緩衝區進行 3D 旋轉來校正影像中的透視問題。
x_rotation是要將影格緩衝區中影像繞 x 軸旋轉的度數(亦即這會使影像上下翻轉)。y_rotation是要將影格緩衝區中影像繞 y 軸旋轉的度數(亦即這會使影像左右翻轉)。z_rotation是要將影格緩衝區中影像繞 z 軸旋轉的度數(亦即這會使影像就地旋轉)。x_translation是旋轉後要將影像向左或向右移動的單位數。由於此平移是在 3D 空間中套用,單位並非像素…y_translation是旋轉後要將影像向上或向下移動的單位數。由於此平移是在 3D 空間中套用,單位並非像素…zoom是對影像放大的量。預設為 1.0。fov是內部 2D->3D 投影所用的視野角。當fov趨近 0 時影像被置於無限遠處;趨近 180 時影像被置於視口內。corners是由四個 (x, y) 元組組成的列表,用於建立一個 4 點單應性,在套用 3D 旋轉之前將這些角點對應到 (0, 0)、(image_width-1, 0)、(image_width-1, image_height-1) 與 (0, image_height-1)。對鳥瞰視角變換很有用。回傳影像物件,以便你能使用
.標記法呼叫另一個方法。不支援壓縮影像或 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¶
使用結構相似性指標 (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,則改回傳結構相異性指標 (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¶
計算
roi上所有色彩通道的正規化直方圖,並回傳一個image.histogram物件。亦可透過Image.get_hist()或Image.histogram()取得。thresholds對於灰階影像是(lo, hi)元組的列表,對於 RGB565 影像是(l_lo, l_hi, a_lo, a_hi, b_lo, b_hi)元組的列表。若有傳入,則僅針對閾值範圍內的像素計算直方圖。invert反轉閾值匹配。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。bins(灰階)或l_bins/a_bins/b_bins(RGB565)設定每個通道的直方圖區間數。必須大於 2。預設為每個通道的最大區間數。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對於灰階影像是(lo, hi)元組的列表,對於 RGB565 影像是(l_lo, l_hi, a_lo, a_hi, b_lo, b_hi)元組的列表。若有傳入,則僅針對閾值範圍內的像素計算統計值。invert反轉閾值匹配。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。bins(灰階)或l_bins/a_bins/b_bins(RGB565)設定每個通道的直方圖區間數。必須大於 2。預設為每個通道的最大區間數。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¶
對影像中所有通過閾值的像素計算線性回歸(Theil-Sen)。回傳一個
image.line物件,若未找到線則回傳 None。thresholds對於灰階影像是(lo, hi)元組的列表,對於 RGB565 影像是(l_lo, l_hi, a_lo, a_hi, b_lo, b_hi)元組的列表。invert反轉閾值匹配。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。x_stride與y_stride控制評估影像時要跳過多少像素。area_threshold最小邊界框面積;較小的結果回傳 None。pixels_threshold最小通過閾值的像素數;較小的結果回傳 None。target_size是一個(w, h)元組。在執行 O(N^2) 演算法之前,ROI 會被區域縮小以容納於此大小內。預設為(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]¶
找出影像中所有色塊(通過閾值測試的連通像素區域),並回傳一個
image.blob物件列表。thresholds對於灰階影像是(lo, hi)元組的列表,對於 RGB565 影像是(l_lo, l_hi, a_lo, a_hi, b_lo, b_hi)元組的列表(LAB 通道)。最多可傳入 32 個元組。對調的最小/最大值會被自動修正;缺少的分量預設為最大範圍。invert反轉閾值匹配。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。x_stride與y_stride控制搜尋色塊時要跳過多少像素。若已知色塊很大可增大此值。area_threshold最小邊界框面積;較小的色塊會被濾除。pixels_threshold最小通過閾值的像素數;較小的色塊會被濾除。merge若為 True,會合併邊界矩形相交的色塊。margin會放大/縮小用於相交判定的邊界矩形。合併後的色塊會將其code位元向量進行 OR(每個閾值一個位元)。threshold_cb會在閾值化後對每個色塊呼叫;回傳 True 以保留、False 以濾除。merge_cb會對每一對即將合併的色塊呼叫;回傳 True 以允許合併、False 以防止合併。x_hist_bins_max若非零,會以此數量的區間為每個色塊填入 x_histogram 投影。y_hist_bins_max若非零,會以此數量的區間為每個色塊填入 y_histogram 投影。不支援壓縮影像或 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]¶
使用霍夫變換找出影像中所有無限長直線。回傳一個
image.line物件列表。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。x_stride與y_stride控制霍夫變換期間要跳過多少像素。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是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。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]¶
使用霍夫變換找出影像中的圓形。回傳一個
image.circle物件列表。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。x_stride與y_stride控制霍夫變換期間要跳過多少像素。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 四邊形偵測演算法找出影像中的矩形。回傳一個
image.rect物件列表。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。threshold最小邊緣量值(沿矩形邊緣的 sobel 量值總和);低於此值的矩形會被濾除。OpenMV Cam M4 上不提供此方法。
- find_qrcodes(roi: Tuple[int, int, int, int] | None = None) List[qrcode]¶
找出
roi內所有 qrcode,並回傳一個image.qrcode物件列表。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。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]¶
找出
roi內所有 apriltag,並回傳一個image.apriltag物件列表。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。families是要解碼的標籤家族的位元遮罩。它是以下各項的邏輯 OR:預設為
image.TAG36H11。偵測時間會隨啟用的家族數量而增加。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]¶
找出
roi內所有 datamatrix,並回傳一個image.datamatrix物件列表。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。effort控制要花多少時間嘗試尋找 data matrix 匹配。較高的值會以幀率為代價提升偵測。低於約 160 的值無法偵測;高於約 240 的值收益遞減。預設為 200。OpenMV Cam M4 上不提供此方法。
- find_barcodes(roi: Tuple[int, int, int, int] | None = None) List[barcode]¶
找出
roi內所有 1D 條碼,並回傳一個image.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是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。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¶
使用相位相關找出此影像相對於
template的平移偏移量。回傳一個image.displacement物件。roi是感興趣區域矩形 (x, y, w, h)。預設為影像矩形。template_roi是樣板的感興趣區域。預設為樣板影像矩形。roi與template_roi必須有相同的寬度與高度。logpolar若為 True,會回傳旋轉/縮放變化而非 x/y 平移。fix_rotation_scale若為 True,會在對齊旋轉與縮放後計算位移(僅在logpolar=False時有意義)。備註
請在 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首次匹配的位置。回傳一個邊界框元組 (x, y, w, h),或 None。template是要與此影像比對的灰階影像。threshold是介於 0.0-1.0 的值。較高的值會減少誤判與偵測;較低的值則相反。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。step是搜尋時要跳過的像素數(僅在image.SEARCH_EX模式中使用)。search為image.SEARCH_DS(較快的菱形搜尋)或image.SEARCH_EX(窮舉搜尋)。僅適用於灰階影像。
- 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 級聯相符的區域,並回傳一個邊界框元組列表 (x, y, w, h)。若未找到特徵則回傳空列表。
cascade是一個 Haar 級聯物件(參見image.HaarCascade())。threshold(0.0-1.0)。較低的值會提高偵測率與誤判率。scale必須大於 1.0。較高的值執行較快但產生較差的匹配。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。
- find_eye(roi: Tuple[int, int, int, int]) Tuple[int, int]¶
在眼睛周圍的感興趣區域 (x, y, w, h) 元組中搜尋瞳孔。回傳瞳孔的 (x, y) 位置,若未找到則回傳 (0, 0)。
roi是感興趣區域矩形元組 (x, y, w, h)。僅適用於灰階影像。
- find_lbp(roi: Tuple[int, int, int, int]) lbp_descriptor¶
從感興趣區域擷取 LBP(局部二值樣式)關鍵點。使用
image.match_descriptor()來比較兩個描述子。roi是感興趣區域矩形元組 (x, y, w, h)。僅適用於灰階影像。
- 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¶
從感興趣區域擷取 ORB 關鍵點。使用
image.match_descriptor()來比較兩個描述子。若未找到關鍵點則回傳 None。roi是感興趣區域矩形元組 (x, y, w, h)。預設為影像矩形。threshold(0-255)控制擷取的角點數量。較低的閾值產生較多角點。AGAST 使用約 20,FAST 使用約 60-80。normalized若為 True,會停用多解析度關鍵點擷取。scale_factor必須大於 1.0。較高的值執行較快但產生較差的匹配。max_keypoints是要保留的最大關鍵點數量。corner_detector為image.CORNER_FAST或image.CORNER_AGAST。僅適用於灰階影像。
- find_edges(edge_type: int, threshold: Tuple[int, int] = (100, 200)) Image¶
將影像轉為黑白,只留下邊緣作為白色像素。
image.EDGE_SIMPLE - 簡單的閾值化高通濾波器演算法。
image.EDGE_CANNY - Canny 邊緣偵測演算法。
threshold是一個包含低閾值與高閾值的兩值元組。你可以透過調整這些值來控制邊緣的品質。它預設為 (100, 200)。僅適用於灰階影像。
- find_hog(roi: Tuple[int, int, int, int] | None = None, size: int = 8) Image¶
以 HOG(方向梯度直方圖)線條取代 ROI 中的像素。
roi是感興趣區域矩形元組 (x, y, w, h)。若未指定,則等於影像矩形。只有roi內的像素會被運算。僅適用於灰階影像。
OpenMV Cam M4 上不提供此方法。
- stereo_disparity(reversed: bool = False, max_disparity: int = 64, threshold: int = 64) Image¶
接受一張包含兩個並排相機感測器輸出的雙倍寬灰階影像,並將其中一半取代為立體視差影像(每個像素代表深度)。例如,對於兩個 320x240 相機,請傳入一張 640x240 影像。
reversed預設情況下會將左影像與右影像比較並取代右影像。設為 True 以將右影像與左影像比較(右->左)並取代左影像。max_disparity是使用絕對差總和搜尋匹配像素區塊的最大距離 (1-255)。較大的值耗時呈指數成長,但產生較高品質的輸出。threshold若兩個區塊之間的絕對差總和小於或等於此閾值,則視為匹配。