# Image 類_ 圖像對象( `import image` )
`Image` 類_圖像對象是機器視覺操作的基本對象
*****
## **構造函數:**
* [ ] **構造圖像對象**
```
class image.Image(path[,copy_to_fb=False])
```
> 打開一個新的圖像對象
*參數:*
* `path`: 圖像對象路徑, 比如`/sd/MixPY.jpg`,支持`bmp` `pgm` `ppm` `jpg` `jpeg`格式的圖像文件
* `copy_to_fb`:圖像介質
* `True`,圖像會直接載入幀緩沖區,可以加載大幅圖片了
* `False`,圖像會載入MicroPython的堆中,堆遠比幀緩沖區小
*返回:*
* 返回一個對象, 根據不同格式返回的對象不同
> 對于JPEG圖像而言,“\[\]”使得您可以訪問壓縮的節數組形式的JPEG圖像色塊。由于JPEG圖像是壓縮的字節流形式,因而對數據組的讀取和寫入是不透明的。
>
> 圖像還支持讀緩沖區操作。您可以把圖像當作節數組對象,將圖像輸入所有類型的MicroPython函數。若您想傳送一個圖像,可以將它傳遞給UART /SPI/ I2C寫入函數,可實現自動傳送。
*****
## **方法:**
* [ ] **獲取圖像的寬度**
```
.width()
```
> 獲取以像素計的圖像的寬度
*參數:*
* 無
*返回:*
* 返回以像素計的圖像的寬度
*****
* [ ] **獲取圖像的高度**
```
.height()
```
> 獲取以像素計的圖像的高度
*參數:*
* 無
*返回:*
* 返回以像素計的圖像的高度
*****
* [ ] **獲取圖像的格式**
```
.format()
```
> 獲取圖像的格式
*參數:*
* 無
*返回:*
* `int`類型的圖像的格式
* `1`:?
* `2`:RGB圖像的`sensor.RGB565`格式
* `3`:?
* `4`:灰度圖的`sensor.GRAYSCALE`格式
*****
* [ ] **獲取圖像大小**
```
.size()
```
> 獲取圖像大小
*參數:*
* 無
*返回:*
* 返回以字節計的圖像大小
*****
* [ ] **獲取圖像某點像素值**
```
.get_pixel(x,y)
```
> 獲取圖像某點像素值
*參數:*
* `x`,`y`:圖像的`(x, y)`位置點
*返回:*
* ` RGB565`圖像,返回`(x, y)`位置的RGB888像素元組`(r, g, b)`
* `GRAYSCALE`圖像, 返回`(x, y)`位置的像素值
> 不支持壓縮圖像
*****
* [ ] **設置圖像某點像素值**
```
.set_pixel(x,y [,rgbtuple])
```
> 設置圖像某點像素值
*參數:*
* `x`,`y`:圖像的`(x, y)`位置點
* `rgbtuple`:設置點顏色`RGB888`元組, 比如`(236, 36, 36)`,默認白色
*返回:*
* ` RGB565`圖像,返回`(x, y)`位置的RGB888像素元組`(r, g, b)`
* `GRAYSCALE`圖像, 返回`(x, y)`位置的像素值
> 不支持壓縮圖像
*****
* [ ] **原圖縮小圖像**
```
.mean_pool(x_div,y_div)
```
> 在原來圖像上快速縮小圖像
*參數:*
* `x_div`,`y_div`:把圖像進行`x_div` `y_div`縮小的倍數(int類型)
*返回:*
* 返回縮小修改圖像
> 不支持壓縮圖像
*****
* [ ] **創建縮小圖像**
```
.mean_pooled(x_div,y_div)
```
> 創建縮小的圖像副本
*參數:*
* `x_div`,`y_div`:把圖像進行`x_div` `y_div`縮小的倍數(int類型)
*返回:*
* 返回縮小新圖像
> 不支持壓縮圖像
*****
* [ ] **圖像轉換為灰度圖**
```
.to_grayscale([copy=False])
```
> 將圖像轉換為灰度圖像
*參數:*
* `copy`:為True才能在堆上創建新的修改圖像
*返回:*
* 返回灰度圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像轉換為彩色圖**
```
.to_rgb565([copy=False])
```
> 將圖像轉換為彩色圖像
*參數:*
* `copy`:為True才能在堆上創建新的修改圖像
*返回:*
* 返回彩色圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像轉換為彩虹圖**
```
.to_rainbow([copy=False])
```
> 將圖像轉換為彩虹圖像
*參數:*
* `copy`:為True才能在堆上創建新的修改圖像
*返回:*
* 返回彩虹圖像對象
> 不支持壓縮圖像
> 彩虹圖像是彩色圖像,對于圖像中的每個8位掩模灰度照明值具有唯一的顏色值。 例如,它為熱圖像提供熱圖顏色。
*****
* [ ] **復制圖像**
```
.copy([roi[,copy_to_fb=False]])
```
> 復制一個圖像對象的副本
*參數:*
* `Roi`:復制的矩形的感興趣區域`(x, y, w, h)`,若未指定,`Roi`即復制整個圖像的圖像矩形
* `copy_to_fb`:若為True,則將幀緩沖替換為圖像
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **保存圖像**
```
.save(path[,roi[,quality=50]])
```
> 將圖像的副本保存到`path`中的文件系統。
*參數:*
* `path`: 圖像對象路徑, 比如`/sd/MixPY.jpg`,支持`bmp` `pgm` `ppm` `jpg` `jpeg`格式的圖像文件
* `Roi`:保存的矩形的感興趣區域(x, y, w, h),若未指定,`Roi`即保存整個圖像的圖像矩形
*`quality`?:指在圖像尚未被壓縮時將圖像保存為JPEG格式的JPEG壓縮質量
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **像素設置為零**
```
.clear()
```
> 將圖像中的所有像素設置為零
*參數:*
* 無
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **繪制直線**
```
.draw_line(x0,y0,x1,y1[,color[,thickness=1]])
```
> 圖像上繪制一條從(x0,y0)到(x1,y1)的線
*參數:*
* `x0`,`y0`,`x1`,`y1`:繪制的直線的起點坐標與終點坐標,可以為單獨傳遞,也可以為元組
* `color`:繪制的直線顏色(默認白色):
* `RGB565`16 位的顏色值,比如`0xFFFF`
* `RGB888`元組, 比如`(236, 36, 36)`
* `GRAYSCALE`灰度圖素值`(0-255)`
* `thickness`:控制線的粗細像素
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **繪制矩形**
```
.draw_rectangle(x,y,w,h[,color[,thickness=1[,fill=False]]])
```
> 圖像上繪制一個矩形
*參數:*
* `x`,`y`,`w`,`h`:繪制的矩形的起點坐標與長寬參數,可以為單獨傳遞,也可以為元組
* `color`:繪制的矩形顏色(默認白色):
* `RGB565`16 位的顏色值,比如`0xFFFF`
* `RGB888`元組, 比如`(236, 36, 36)`
* `GRAYSCALE`灰度圖素值`(0-255)`
* `thickness`:控制矩形的條框線粗細像素
* `fill`:為True以填充矩形
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **繪制圓形**
```
.draw_circle(x,y,radius[,color[,thickness=1[,fill=False]]])
```
> 圖像上繪制一個圓形
*參數:*
* `x`,`y`,`radius`:繪制的圓形的圓心坐標與半徑,可以為單獨傳遞,也可以為元組
* `color`:繪制的圓形顏色(默認白色):
* `RGB565`16 位的顏色值,比如`0xFFFF`
* `RGB888`元組, 比如`(236, 36, 36)`
* `GRAYSCALE`灰度圖素值`(0-255)`
* `thickness`:控制圓形的條框粗細像素
* `fill`:為True以填充圓形
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **繪制文本**
```
.draw_string(x,y,text[,color[,scale=1[,x_spacing=0[,y_spacing=0[,mono_space=True]]]]])
```
>在 圖像中的(x, y)起點位置開始繪制文本
*參數:*
* `x`,`y`:繪制的文本的起點坐標(左上角),可以為單獨傳遞,也可以為元組
* `color`:繪制的圓形顏色(默認白色):
* `RGB565`16 位的顏色值,比如`0xFFFF`
* `RGB888`元組, 比如`(236, 36, 36)`
* `GRAYSCALE`灰度圖素值`(0-255)`
* `scale`設置圖像上文本的大小(字號)
* `x_spacing`:設置字符間距,字符之間添加(如果是正數)或減去(如果是負數)x像素
* `y_spacing`:設置行間距,字符之間添加(如果是正數)或減去(如果是負數)y像素
* `mono_space`:默認為`True`,強制文本間距固定,設置`False`以獲得非固定寬度的字符間距
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **繪制十字**
```
.draw_cross(x,y[,color[,size=5[,thickness=1]]])
```
> 圖像上繪制一個十字
*參數:*
* `x`,`y`:繪制的十字的中心坐標,可以為單獨傳遞,也可以為元組
* `color`:繪制的圓形顏色(默認白色):
* `RGB565`16 位的顏色值,比如`0xFFFF`
* `RGB888`元組, 比如`(236, 36, 36)`
* `GRAYSCALE`灰度圖素值`(0-255)`
* `size`:控制十字的延伸長度像素
* `thickness`:控制十字的條框粗細像素
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **繪制箭頭**
```
.draw_arrow(x0,y0,x1,y1[,color[,thickness=1]])
```
> 圖像上繪制一個箭頭
*參數:*
* `x0`,`y0`,`x1`,`y1`:繪制的箭頭的起點坐標與終點坐標,可以為單獨傳遞,也可以為元組
* `color`:繪制的箭頭顏色(默認白色):
* `RGB565`16 位的顏色值,比如`0xFFFF`
* `RGB888`元組, 比如`(236, 36, 36)`
* `GRAYSCALE`灰度圖素值`(0-255)`
* `thickness`:控制箭頭的粗細像素
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **繪制圖像**
```
.draw_image(image,x,y[,x_scale=1.0[,y_scale=1.0[,mask=None]]])
```
> 繪制一個`image`圖像
*參數:*
* `image`:傳入一個`image`類型圖像
* `x`,`y`:繪制的圖像的起點坐標(左上角),可以為單獨傳遞,也可以為元組
* `x_scale`:控制圖像在x方向(浮點數)縮放的程度
* `y_scale`:控制圖像在y方向(浮點數)縮放的程度
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **繪制特征點**
```
.draw_keypoints(keypoints[,color[,size=10[,thickness=1[,fill=False]]]])
```
> 繪制一個特征點對象的各個點
*參數:*
* `keypoints`:傳入一個特征點對象(可以用`.find_keypoints`方法獲取)
* `color`:繪制特征點顏色(默認白色):
* `RGB565`16 位的顏色值,比如`0xFFFF`
* `RGB888`元組, 比如`(236, 36, 36)`
* `GRAYSCALE`灰度圖素值`(0-255)`
* `size`:控制特征點的大小
* `thickness`:控制線的粗細像素
* `fill`:設置為True以填充特征點
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **填充圖像**
```
.flood_fill(x,y[,seed_threshold=0.05[,floating_threshold=0.05[,color[,invert=False[,clear_background=False[,mask=None]]]]]])
```
> 像洪水一樣填充圖像中低矮凹陷的地方(洪水填充)
*參數:*
* `x`,`y`:從`x,y`位置開始填充圖像的區域,可以為單獨傳遞,也可以為元組
* `seed_threshold`:控制填充區域中的像素與原始起始像素的差異
* `floating_threshold`:控制填充區域中的像素與任何相鄰像素的差異
* `color`:區域填充的顏色(默認白色):
* `RGB565`16 位的顏色值,比如`0xFFFF`
* `RGB888`元組, 比如`(236, 36, 36)`
* `GRAYSCALE`灰度圖素值`(0-255)`
* `invert`:若為True,以重新填充`flood_fill`連接區域外的所有內容
* `clear_background`:若為True,將其余的`flood_fill`沒有重新著色的像素歸零
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像二值化**
```
.binary(thresholds[,invert=False[,zero=False[,mask=None[,to_bitmap=False[,copy=False]]]]])
```
> 將給定值追蹤的顏色像素設置為黑、白色二值化
*參數:*
* `thresholds`:追蹤的顏色閾值,必須是元組列表`[ ]`
* 若灰度圖像,每個元組需要包含兩個值,最小灰度值和最大灰度值
* 若彩色圖像,每個元組需要有六個值`(l_lo,l_hi,a_lo,a_hi,b_lo,b_hi)`,為LAB L,A和B通道的最小值和最大值
* `invert`:若為`True`反轉閾值操作
* `zero`:若為`True`來使閾值像素為零,并使不在閾值列表中的像素保持不變
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
`to_bitmap`:若為`True`將圖像數據轉換為二進制位圖圖像
`copy`:若為`True`創建二值化映像的副本
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像反轉**
```
.invert()
```
> 翻轉圖像中的所有像素值
*參數:*
* 無
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像反轉**
```
.invert()
```
> 翻轉圖像中的所有像素值
*參數:*
* 無
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像腐蝕**
```
.erode(size[,threshold[,mask=None]])
```
> 圖像腐蝕,從分割區域的邊緣刪除像素(白色目標區域)
*參數:*
* `size`:通過卷積圖像上`((size*2)+1)x((size*2)+1)`像素的核來實現
* ` threshold`:若未設定,功能如標準腐蝕方法一樣。若設定,可以指定腐蝕的特定像素
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像膨脹**
```
.dilate(size[,threshold[,mask=None]])
```
> 圖像膨脹,將像素添加到分割區域的邊緣中(白色目標區域)
*參數:*
* `size`:通過卷積圖像上`((size*2)+1)x((size*2)+1)`像素的核來實現
* ` threshold`:若未設定,功能如標準膨脹方法一樣。若設定,可以指定膨脹的特定像素
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像反轉**
```
.negate()
```
> 非常快速地翻轉圖像中的所有像素值
*參數:*
* 無
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像替換**
```
.replace(image[,hmirror=False[,vflip=False[,mask=None]]])
```
> 用新圖像替換原有圖像
*參數:*
* `image`:傳入一個`image`類型圖像
* `hmirror`:設置為True以水平鏡像替換圖像。
* `vflip`:設置為True以垂直翻轉替換圖像
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像相加**
```
.add(image[,mask=None])
```
> 將兩個圖像彼此按像素相加
*參數:*
* `image`:傳入一個`image`類型圖像,也可以是RGB888元組或灰度圖像素值
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像相減**
```
.sub(image[,reverse=False[,mask=None])
```
> 將兩個圖像彼此按像素相減
*參數:*
* `image`:傳入一個`image`類型圖像,也可以是RGB888元組或灰度圖像素值
* `reverse`:設置為True可以將減法操作從`this_image-image`反轉為`image-this_image`
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像相乘**
```
.mul(image[,invert=False[,mask=None])
```
> 將兩個圖像彼此按像素相乘
*參數:*
* `image`:傳入一個`image`類型圖像,也可以是RGB888元組或灰度圖像素值
* `invert`:設置為True可將乘法運算從`a*b`改為`1/((1/a)*(1/b))`,這使圖像變亮而不是使圖像變暗
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像相除**
```
.div(image[,invert=False[,mask=None])
```
> 將兩個圖像彼此按像素相除
*參數:*
* `image`:傳入一個`image`類型圖像,也可以是RGB888元組或灰度圖像素值
*`invert`:設置為True可將除法方向從`a/b`改為`b/a`
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **最小像素值刷選**
```
.min(image[,mask=None])
```
> 在像素級 用此圖像和另一個圖像之間的最小像素值替換此圖像中的像素
*參數:*
* `image`:傳入一個`image`類型圖像,也可以是RGB888元組或灰度圖像素值
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **最大像素值刷選**
```
.max(image[,mask=None])
```
> 在像素級 用此圖像和另一個圖像之間的最大像素值替換此圖像中的像素
*參數:*
* `image`:傳入一個`image`類型圖像,也可以是RGB888元組或灰度圖像素值
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像絕對值**
```
.difference(image[,mask=None])
```
> 將兩個圖像彼此按像素取絕對值
*參數:*
* `image`:傳入一個`image`類型圖像,也可以是RGB888元組或灰度圖像素值
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **圖像融合**
```
.blend(image[,mask=None])
```
> 將另外一張圖像與這一圖像融合
*參數:*
* `image`:傳入一個`image`類型圖像,也可以是RGB888元組或灰度圖像素值
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **直方圖均衡算法**
```
.histeq([adaptive=False[,clip_limit=-1[,mask=None]]])
```
> 在圖像上運行直方圖均衡算法,直方圖均衡化使圖像中的對比度和亮度標準化
*參數:*
* `adaptive`:若為True,將在圖像上運行自適應直方圖均衡方法
* `clip_limit`:提供了一種限制自適應直方圖均衡的對比度的方法
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **均值濾波**
```
.mean(size,[threshold=False, [offset=0, [invert=False, [mask=None]]]])
```
> 使用盒式濾波器的標準均值模糊濾波
*參數:*
*`size`:?是內核的大小,取1 (3x3 內核)、2 (5x5 內核)或更高值
* `threshold`:若為`True`,啟動圖像的自適應閾值處理, 根據環境像素的亮度,將像素設置為1或者0
* `offset`:值將更多像素設置為1,而正值僅將最強對比度設置為1
* `invert`:反轉二進制圖像的結果輸出
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
* [ ] **中值濾波**
```
.median(size,[threshold=False, [offset=0, [invert=False, [mask=None]]]]])
```
> 使用盒式濾波器的標準均值模糊濾波
*參數:*
*`size`:?是內核的大小,取1 (3x3 內核)、2 (5x5 內核)或更高值
* `threshold`:若為`True`,啟動圖像的自適應閾值處理, 根據環境像素的亮度,將像素設置為1或者0
* `offset`:值將更多像素設置為1,而正值僅將最強對比度設置為1
* `invert`:反轉二進制圖像的結果輸出
* `mask`:繪圖操作的像素級掩碼的圖像。掩碼為一個只有黑色或白色像素的圖像,和繪制的`image`大小相同
*返回:*
* 返回一個圖像對象
> 不支持壓縮圖像
*****
`image.to_bitmap`(\[*copy=False*\])
Converts an image to a bitmap image (1 bit per pixel). This method modifies the underlying image pixels changing the image size in bytes too so it can only be done in place on a Grayscale or an RGB565 image. Otherwise`copy`must be True to create a new modified image on the heap.
Returns the image object so you can call another method using`.`notation.
Not supported on compressed images or bayer images.
`
`image.draw_image`(*image*,*x*,*y*\[,*x\_scale=1.0*\[,*y\_scale=1.0*\[,*mask=None*\]\]\])
繪制一個`image`,其左上角從位置x,y開始。 您可以單獨傳遞x,y,也可以傳遞給元組(x,y)。
`x_scale`控制圖像在x方向(浮點數)縮放的程度。
`y_scale`控制圖像在y方向(浮點數)縮放的程度。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 您可以使用mask掩碼進行繪制操作。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.draw_keypoints`(*keypoints*\[,*color*\[,*size=10*\[,*thickness=1*\[,*fill=False*\]\]\]\])
在圖像上畫出一個特征點對象的各個點。
`color`是用于灰度或RGB565圖像的RGB888元組。默認為白色。但是,您也可以傳遞灰度圖像的基礎像素值(0-255)或RGB565圖像的字節反轉RGB565值。
`size`控制特征點的大小。
`thickness`控制線的粗細像素。
將`fill`設置為True以填充特征點。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.flood_fill`(*x*,*y*\[,*seed\_threshold=0.05*\[,*floating\_threshold=0.05*\[,*color*\[,*invert=False*\[,*clear\_background=False*\[,*mask=None*\]\]\]\]\]\])
從位置x,y開始填充圖像的區域。 您可以單獨傳遞x,y,也可以傳遞給元組(x,y)。
`seed_threshold`控制填充區域中的像素與原始起始像素的差異。
`floating_threshold`控制填充區域中的像素與任何相鄰像素的差異。
`color`是用于灰度或RGB565圖像的RGB888元組。默認為白色。但是,您也可以傳遞灰度圖像的基礎像素值(0-255)或RGB565圖像的字節反轉RGB565值。
將`invert`傳遞為True,以重新填充flood\_fill連接區域外的所有內容。
將`clear_background`傳遞為True,將其余的flood\_fill沒有重新著色的像素歸零。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩膜中設置的像素會在flood\_fill時被評估。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.binary`(*thresholds*\[,*invert=False*\[,*zero=False*\[,*mask=None*\[,*to\_bitmap=False*\[,*copy=False*\]\]\]\]\])
根據像素是否在閾值列表`thresholds`中的閾值內,將圖像中的所有像素設置為黑色或白色。
`thresholds`必須是元組列表。`[(lo,hi),(lo,hi),...,(lo,hi)]`定義你想追蹤的顏色范圍。 對于灰度圖像,每個元組需要包含兩個值 - 最小灰度值和最大灰度值。 僅考慮落在這些閾值之間的像素區域。 對于RGB565圖像,每個元組需要有六個值(l\_lo,l\_hi,a\_lo,a\_hi,b\_lo,b\_hi) - 分別是LAB L,A和B通道的最小值和最大值。 為方便使用,此功能將自動修復交換的最小值和最大值。 此外,如果元組大于六個值,則忽略其余值。相反,如果元組太短,則假定其余閾值處于最大范圍。
注解
獲取所跟蹤對象的閾值,只需在IDE幀緩沖區中選擇(單擊并拖動)跟蹤對象。 直方圖會相應地更新到所在區域。然后只需寫下顏色分布在每個直方圖通道中起始與下降位置。 這些將是`thresholds`的低值和高值。 由于上下四分位數據相差微小,故手動確定閾值為佳。
您還可以通過進入OpenMV IDE中的`工具->機器視覺->閾值編輯器`并從GUI窗口中拖動滑塊來確定顏色閾值。
`invert`反轉閾值操作,像素在已知顏色范圍之外進行匹配,而非在已知顏色范圍內。
設置`zero`為True來使閾值像素為零,并使不在閾值列表中的像素保持不變。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
`to_bitmap`turns the image data into a binary bitmap image where each pixel is stored in 1 bit. Set`copy`to True when using`to_bitmap`.
`copy`if True creates a copy of the binarized image on the heap versus modifying the source image.
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.invert`()
將二進制圖像0(黑色)變為1(白色),1(白色)變為0(黑色),非常快速地翻轉二進制圖像中的所有像素值。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和Bayer圖像。
`image.b_and`(*image*\[,*mask=None*\])
用另一圖像與這一圖像進行邏輯與運算。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.b_nand`(*image*\[,*mask=None*\])
用另一圖像與這一圖像進行邏輯與非運算。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.b_or`(*image*\[,*mask=None*\])
用另一圖像與這一圖像進行邏輯或運算。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``b_nor`(*image*\[,*mask=None*\])
用另一圖像與這一圖像進行邏輯或非運算。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``b_xor`(*image*\[,*mask=None*\])
用另一圖像與這一圖像進行邏輯異或運算。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``b_xnor`(*image*\[,*mask=None*\])
用另一圖像與這一圖像進行邏輯同或運算。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``erode`(*size*\[,*threshold*\[,*mask=None*\]\])
從分割區域的邊緣刪除像素。
這一方法通過卷積圖像上((size\*2)+1)x((size\*2)+1)像素的核來實現,如果相鄰像素集的總和小于`threshold`,則對內核的中心像素進行歸零。
若`threshold`未設定,這個方法的功能如標準腐蝕方法一樣。若threshold設定,您就可以指定腐蝕的特定像素,例如:設置低于2個的像素周圍閾值為2。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``dilate`(*size*\[,*threshold*\[,*mask=None*\]\])
將像素添加到分割區域的邊緣中。
這一方法通過卷積圖像上((size\*2)+1)x((size\*2)+1)像素的核來實現,如果相鄰像素集的總和大于`threshold`,則將內核的中心像素進行設置。
若`threshold`未設定,這個方法的功能如標準腐蝕方法一樣。若threshold設定,您就可以指定腐蝕的特定像素,例如:設置低于2個的像素周圍閾值為2。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``open`(*size*\[,*threshold*\[,*mask=None*\]\])
按順序對圖像執行腐蝕和膨脹。有關更多信息,請參閱`image.erode()`和`image.dilate()`。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``close`(*size*\[,*threshold*\[,*mask=None*\]\])
按順序對圖像執行膨脹和腐蝕。有關更多信息,請參閱`image.erode()`和`image.dilate()`。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``top_hat`(*size*\[,*threshold*\[,*mask=None*\]\])
返回原圖像和執行`image.open()`函數后圖像的差異。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
不支持壓縮圖像和bayer圖像。
`image.``black_hat`(*size*\[,*threshold*\[,*mask=None*\]\])
返回原圖像和執行`image.close()`函數后圖像的差異。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
不支持壓縮圖像和bayer圖像。
`image.``negate`()
非常快速地翻轉(數字反轉)圖像中的所有像素值。對每個顏色通道的像素值進行數值轉換。例: (255 - pixel).
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``replace`(*image*\[,*hmirror=False*\[,*vflip=False*\[,*mask=None*\]\]\])
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
將`hmirror`設置為True以水平鏡像替換圖像。
將`vflip`設置為True以垂直翻轉替換圖像。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``add`(*image*\[,*mask=None*\])
將兩個圖像彼此按像素相加。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``sub`(*image*\[,*reverse=False*\[,*mask=None*\]\])
將兩個圖像彼此按像素相減。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
將`reverse`設置為True可以將減法操作從`this_image-image`反轉為`image-this_image`。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``mul`(*image*\[,*invert=False*\[,*mask=None*\]\])
將兩個圖像彼此按像素相乘。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
將`invert`設置為True可將乘法運算從`a*b`改為`1/((1/a)*(1/b))`。 特別是,這使圖像變亮而不是使圖像變暗(例如,乘法與刻錄操作)。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``div`(*image*\[,*invert=False*\[,*mask=None*\]\])
將此圖像除以另一個圖像。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
將`invert`設置為True可將除法方向從`a/b`改為`b/a`。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``min`(*image*\[,*mask=None*\])
在像素級 用此圖像和另一個圖像之間的最小像素值替換此圖像中的像素。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
這個方法在OpenMV4上不可用.
`image.``max`(*image*\[,*mask=None*\])
在像素級 用此圖像和另一個圖像之間的最大像素值替換此圖像中的像素。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``difference`(*image*\[,*mask=None*\])
將兩個圖像彼此按像素取絕對值。例:對于每個顏色通道而言,將每個像素替換為ABS(this.pixel-image.pixel)。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``blend`(*image*\[,*alpha=128*\[,*mask=None*\]\])
將另外一張圖像`image`與這一圖像融合。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
`alpha`控制要混合到這個圖像中的其他圖像的多少.`alpha`應該是0到256之間的整數值。接近零的值會將更多其他圖像混合到此圖像中,接近256則相反。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``histeq`(\[*adaptive=False*\[,*clip\_limit=-1*\[,*mask=None*\]\]\])
在圖像上運行直方圖均衡算法。 直方圖均衡化使圖像中的對比度和亮度標準化。
如果`adaptive`傳遞為True,那么將在圖像上運行自適應直方圖均衡方法,這通常比非自適應直方圖限定更好,但運行時間更長。
`clip_limit`提供了一種限制自適應直方圖均衡的對比度的方法。 使用較小的值(例如10)可以生成良好的直方圖均衡對比度受限圖像。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``mean`(*size, \[threshold=False, \[offset=0, \[invert=False, \[mask=None\]\]\]\]\]*)
使用盒式濾波器的標準均值模糊濾波。
`Size`?是內核的大小。取1 (3x3 內核)、2 (5x5 內核)或更高值。
如果你想在濾波器的輸出上自適應地設置閾值,你可以傳遞`threshold=True`參數來啟動圖像的自適應閾值處理, 他根據環境像素的亮度(核函數周圍的像素的亮度有關),將像素設置為1或者0。 負數`offset`值將更多像素設置為1,而正值僅將最強對比度設置為1。 設置`invert`以反轉二進制圖像的結果輸出。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`median`(*size, percentile=0.5, threshold=False, offset=0, invert=False, mask\]*)
在圖像上運行中值濾波。在保留邊緣的條件下,中值濾波是用來平滑表面的最佳濾波,但是運行速度極慢。
`Size`?是內核的大小。取1 (3x3 內核)、2 (5x5 內核)或更高值。
`percentile`?控制內核中所使用值的百分位數。默認情況下,每個像素都使用相鄰的第五十個百分位數(中心)替換。使用最小濾波時,您可將此值設置為0,使用下四分位數濾波時設置為0.25,使用上四分位數濾波時設置為0.75,使用最大濾波時設置為1。
如果你想在濾波器的輸出上自適應地設置閾值,你可以傳遞`threshold=True`參數來啟動圖像的自適應閾值處理, 他根據環境像素的亮度(核函數周圍的像素的亮度有關),將像素設置為1或者0。 負數`offset`值將更多像素設置為1,而正值僅將最強對比度設置為1。 設置`invert`以反轉二進制圖像的結果輸出。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``mode`(*size*\[,*threshold=False*,*offset=0*,*invert=False*,*mask*\])
在圖像上運行眾數濾波,用相鄰像素的模式替換每個像素。這一方法在灰度圖上運行效果良好。但由于這一操作的非線性特性,會在RGB圖像邊緣上產生許多偽像。
`Size`?是內核的大小。取1 (3x3 內核)、2 (5x5 內核)。
如果你想在濾波器的輸出上自適應地設置閾值,你可以傳遞`threshold=True`參數來啟動圖像的自適應閾值處理, 他根據環境像素的亮度(核函數周圍的像素的亮度有關),將像素設置為1或者0。 負數`offset`值將更多像素設置為1,而正值僅將最強對比度設置為1。 設置`invert`以反轉二進制圖像的結果輸出。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``midpoint`(*size*\[,*bias=0.5*,*threshold=False*,*offset=0*,*invert=False*,*mask*\])
在圖像上運行中點濾波。此濾波器找到圖像中每個像素鄰域的中點((max-min)/2)。
`size`是內核的大小。取1 (3x3 內核)、2 (5x5 內核)或更高值。
`bias`控制圖像混合的最小/最大程度。0只適用于最小濾波,1僅用于最大濾波。您可以通過`bias`對圖像進行最小/最大化過濾。
如果你想在濾波器的輸出上自適應地設置閾值,你可以傳遞`threshold=True`參數來啟動圖像的自適應閾值處理, 他根據環境像素的亮度(核函數周圍的像素的亮度有關),將像素設置為1或者0。 負數`offset`值將更多像素設置為1,而正值僅將最強對比度設置為1。 設置`invert`以反轉二進制圖像的結果輸出。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``morph`(*size*,*kernel*,*mul=Auto*,*add=0*)
通過過濾器內核對圖像進行卷積。這允許您對圖像執行通用卷積。
`size`將內核的大小控制為((size\*2)+1)x((size\*2)+1)像素。
`kernel`用來卷積圖像的內核,可為一個元組或一個取值\[-128:127\]的列表。
`mul`是用以與卷積像素結果相乘的數字。若不設置,則默認一個值,該值將防止卷積輸出中的縮放。
`add`是用來與每個像素卷積結果相加的數值。
`mul`可進行全局對比度調整,add可進行全局亮度調整。
如果你想在濾波器的輸出上自適應地設置閾值,你可以傳遞`threshold=True`參數來啟動圖像的自適應閾值處理, 他根據環境像素的亮度(核函數周圍的像素的亮度有關),將像素設置為1或者0。 負數`offset`值將更多像素設置為1,而正值僅將最強對比度設置為1。 設置`invert`以反轉二進制圖像的結果輸出。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``gaussian`(*size*\[,*unsharp=False*\[,*mul*\[,*add=0*\[,*threshold=False*\[,*offset=0*\[,*invert=False*\[,*mask=None*\]\]\]\]\]\]\])
通過平滑高斯核對圖像進行卷積。
`size`是內核的大小。取1 (3x3 內核)、2 (5x5 內核)或更高值。
如果`unsharp`設置為True,那么這種方法不會僅進行高斯濾波操作,而是執行非銳化掩模操作,從而提高邊緣的圖像清晰度。
`mul`是用以與卷積像素結果相乘的數字。若不設置,則默認一個值,該值將防止卷積輸出中的縮放。
`add`是用來與每個像素卷積結果相加的數值。
`mul`可進行全局對比度調整,add可進行全局亮度調整。
如果你想在濾波器的輸出上自適應地設置閾值,你可以傳遞`threshold=True`參數來啟動圖像的自適應閾值處理, 他根據環境像素的亮度(核函數周圍的像素的亮度有關),將像素設置為1或者0。 負數`offset`值將更多像素設置為1,而正值僅將最強對比度設置為1。 設置`invert`以反轉二進制圖像的結果輸出。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`image.``laplacian`(*size*\[,*sharpen=False*\[,*mul*\[,*add=0*\[,*threshold=False*\[,*offset=0*\[,*invert=False*\[,*mask=None*\]\]\]\]\]\]\])
通過邊緣檢測拉普拉斯核來對圖像進行卷積。
`size`是內核的大小。取1 (3x3 內核)、2 (5x5 內核)或更高值。
如果`sharpen`被設置為True,那么這種方法將改為銳化圖像,而不是僅輸出未經過閾值處理的邊緣檢測圖像。 增加內核大小然后增加圖像清晰度。
`mul`是用以與卷積像素結果相乘的數字。若不設置,則默認一個值,該值將防止卷積輸出中的縮放。
`add`是用來與每個像素卷積結果相加的數值。
`mul`可進行全局對比度調整,add可進行全局亮度調整。
如果你想在濾波器的輸出上自適應地設置閾值,你可以傳遞`threshold=True`參數來啟動圖像的自適應閾值處理, 他根據環境像素的亮度(核函數周圍的像素的亮度有關),將像素設置為1或者0。 負數`offset`值將更多像素設置為1,而正值僅將最強對比度設置為1。 設置`invert`以反轉二進制圖像的結果輸出。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``bilateral`(*size*\[,*color\_sigma=0.1*\[,*space\_sigma=1*\[,*threshold=False*\[,*offset=0*\[,*invert=False*\[,*mask=None*\]\]\]\]\]\])
通過雙邊濾波器對圖像進行卷積。 雙邊濾波器使圖像平滑,同時保持圖像中的邊緣。
`size`是內核的大小。取1 (3x3 內核)、2 (5x5 內核)或更高值。
`color_sigma`控制使用雙邊濾波器匹配顏色的接近程度。增加此值可增加顏色模糊。
`space_sigma`控制像素在空間方面相互模糊的程度。增加此值可增加像素模糊。
如果你想在濾波器的輸出上自適應地設置閾值,你可以傳遞`threshold=True`參數來啟動圖像的自適應閾值處理, 他根據環境像素的亮度(核函數周圍的像素的亮度有關),將像素設置為1或者0。 負數`offset`值將更多像素設置為1,而正值僅將最強對比度設置為1。 設置`invert`以反轉二進制圖像的結果輸出。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``cartoon`(*size*\[,*seed\_threshold=0.05*\[,*floating\_threshold=0.05*\[,*mask=None*\]\]\])
漫游圖像并使用flood-fills算法填充圖像中的所有像素區域。 這通過使圖像的所有區域中的顏色變平來有效地從圖像中去除紋理。 為了獲得最佳效果,圖像應具有大量對比度,以使區域不會太容易相互滲透。
`seed_threshold`控制填充區域中的像素與原始起始像素的差異。
`floating_threshold`控制填充區域中的像素與任何相鄰像素的差異。
`mask`是另一個用作繪圖操作的像素級掩碼的圖像。掩碼應該是一個只有黑色或白色像素的圖像,并且應該與你正在繪制的`image`大小相同。 僅掩碼中設置的像素被修改。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``remove_shadows`(\[*image*\])
從該圖像中移除陰影。
如果當前圖像沒有“無陰影”版本出現,則此方法將嘗試從圖像中去除陰影,但沒有真實無陰影的圖像依據。 這種算法適用于去除平坦均勻背景中的陰影。 請注意,此方法需要多秒才能運行,并且僅適用于實時移除陰影,動態生成無陰影版本的圖像。 該算法的未來版本將適用于更多的環境,但同樣緩慢。
如果當前圖像有“無陰影”版本出現,則此方法將使用“真實源”背景無陰影圖像去除圖像中的所有陰影以濾除陰影。 非陰影像素不會被過濾掉,因此您可以向場景中添加以前不存在的新對象,并且這些對象中的任何非陰影像素都將顯示出來。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
只支持RGB565圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``chrominvar`()
從圖像中刪除照明效果,僅留下顏色漸變。比`image.illuminvar()`更快但受陰影影響。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
僅支持RGB565圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``illuminvar`()
從圖像中刪除照明效果,僅留下顏色漸變。比`image.chrominvar()`慢但不受陰影影響。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
僅支持RGB565圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``linpolar`(\[*reverse=False*\])
圖像從笛卡爾坐標到線性極坐標重新投影。
設置`reverse=True`可以在相反的方向重新投影。
線性極坐標重新投影將圖像旋轉轉換為x平移。
不支持壓縮圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``logpolar`(\[*reverse=False*\])
圖像從笛卡爾坐標到對數極坐標重新投影。
設置`reverse=True`可以在相反的方向重新投影。
對數極坐標重新投影將圖像的旋轉轉換為x平移和縮放到y平移。
不支持壓縮圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``lens_corr`(\[*strength=1.8*\[,*zoom=1.0*\]\])
進行鏡頭畸變校正,以去除鏡頭造成的圖像魚眼效果。
`strength`?是一個浮點數,該值確定了對圖像進行去魚眼效果的程度。在默認情況下,首先試用取值1.8,然后調整這一數值使圖像顯示最佳效果。
`zoom`?是在對圖像進行縮放的數值。默認值為 1.0 。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
`img.``rotation_corr`(\[*x\_rotation=0.0*\[,*y\_rotation=0.0*\[,*z\_rotation=0.0*\[,*x\_translation=0.0*\[,*y\_translation=0.0*\[,*zoom=1.0*\]\]\]\]\]\])
通過執行幀緩沖區的3D旋轉來糾正圖像中的透視問題。
`x_rotation`是圍繞x軸在幀緩沖器中旋轉圖像的度數(這使圖像上下旋轉)。
`y_rotation`是幀緩沖區中圍繞y軸旋轉圖像的度數(即左右旋轉圖像)。
`z_rotation`是圍繞z軸在幀緩沖器中旋轉圖像的度數(即,使圖像旋轉到適當位置)。
`x_translation`是旋轉后將圖像移動到左側或右側的單位數。因為這個變換是應用在三維空間的,單位不是像素…
`y_translation`是旋轉后將圖像上移或下移的單位數。因為這個變換是應用在三維空間的,單位不是像素…
`zoom`是通過圖像縮放的量。默認情況下1.0。
返回圖像對象,以便您可以使用`.`表示法調用另一個方法。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``get_similarity`(*image*)
返回一個“相似度”對象,描述兩幅圖像使用SSIM算法來比較兩幅圖像之間的8x8像素色塊的相似度。
`image`可以是圖像對象,未壓縮圖像文件的路徑(bmp/pgm/ppm),也可以是標量值。 如果標量值,該值可以是RGB888元組或基礎像素值(例如,灰度圖像的8位灰度級或RGB圖像的字節反轉RGB565值)。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``get_histogram`(\[*thresholds*\[,*invert=False*\[,*roi*\[,*bins*\[,*l\_bins*\[,*a\_bins*\[,*b\_bins*\]\]\]\]\]\]\])
在`roi`的所有顏色通道上進行標準化直方圖運算,并返回`histogram`對象。 請參考`histogram`對象以獲取更多信息。您也可以使用`image.get_hist`或`image.histogram`來調用這一方法。如果傳遞`thresholds`列表,則直方圖信息將僅從閾值列表中的像素計算得出。
`thresholds`必須是元組列表。`[(lo,hi),(lo,hi),...,(lo,hi)]`定義你想追蹤的顏色范圍。 對于灰度圖像,每個元組需要包含兩個值 - 最小灰度值和最大灰度值。 僅考慮落在這些閾值之間的像素區域。 對于RGB565圖像,每個元組需要有六個值(l\_lo,l\_hi,a\_lo,a\_hi,b\_lo,b\_hi) - 分別是LAB L,A和B通道的最小值和最大值。 為方便使用,此功能將自動修復交換的最小值和最大值。 此外,如果元組大于六個值,則忽略其余值。相反,如果元組太短,則假定其余閾值處于最大范圍。
注解
獲取所跟蹤對象的閾值,只需在IDE幀緩沖區中選擇(單擊并拖動)跟蹤對象。 直方圖會相應地更新到所在區域。然后只需寫下顏色分布在每個直方圖通道中起始與下降位置。 這些將是`thresholds`的低值和高值。 由于上下四分位數據相差微小,故手動確定閾值為佳。
您還可以通過進入OpenMV IDE中的`工具->機器視覺->閾值編輯器`并從GUI窗口中拖動滑塊來確定顏色閾值。
`invert`反轉閾值操作,像素在已知顏色范圍之外進行匹配,而非在已知顏色范圍內。
除非您需要使用顏色統計信息進行高級操作,否則只需使用`image.get\_statistics()` 方法代替此方法查看圖像中的像素區域。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
`bins`和其他bin是用于直方圖通道的箱數。對于灰度圖像,使用`bins`, 對于RGB565圖像,使用其他每個通道。每個通道的bin計數必須大于2。 另外,將bin計數設置為大于每個通道的唯一像素值的數量是沒有意義的。 默認情況下,直方圖將具有每個通道的最大bin數。
不支持壓縮圖像和bayer圖像。
`image.``get_statistics`(\[*thresholds*\[,*invert=False*\[,*roi*\[,*bins*\[,*l\_bins*\[,*a\_bins*\[,*b\_bins*\]\]\]\]\]\]\])
計算`roi`中每個顏色通道的平均值、中值、眾值、標準偏差、最小值、最大值、下四分值和上四分值,并返回一個數據對象。 請參見`statistics`對象以獲取更多信息。您也可以使用`image.get_stats`或`image.statistics`來調用這一方法。 如果傳遞`thresholds`列表,則直方圖信息將僅從閾值列表中的像素計算得出。
`thresholds`必須是元組列表。`[(lo,hi),(lo,hi),...,(lo,hi)]`定義你想追蹤的顏色范圍。 對于灰度圖像,每個元組需要包含兩個值 - 最小灰度值和最大灰度值。 僅考慮落在這些閾值之間的像素區域。 對于RGB565圖像,每個元組需要有六個值(l\_lo,l\_hi,a\_lo,a\_hi,b\_lo,b\_hi) - 分別是LAB L,A和B通道的最小值和最大值。 為方便使用,此功能將自動修復交換的最小值和最大值。 此外,如果元組大于六個值,則忽略其余值。相反,如果元組太短,則假定其余閾值處于最大范圍。
注解
獲取所跟蹤對象的閾值,只需在IDE幀緩沖區中選擇(單擊并拖動)跟蹤對象。 直方圖會相應地更新到所在區域。然后只需寫下顏色分布在每個直方圖通道中起始與下降位置。 這些將是`thresholds`的低值和高值。 由于上下四分位數據相差微小,故手動確定閾值為佳。
您還可以通過進入OpenMV IDE中的`工具->機器視覺->閾值編輯器`并從GUI窗口中拖動滑塊來確定顏色閾值。
`invert`反轉閾值操作,像素在已知顏色范圍之外進行匹配,而非在已知顏色范圍內。
您可以在需要獲取圖像中一個像素區域信息時使用這一方法。例如:若您想用幀差法來檢測運動時, 您需要使用這一方法來確定圖像顏色通道的變化,從而觸發運動檢測閾值。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
`bins`和其他bin是用于直方圖通道的箱數。對于灰度圖像,使用`bins`, 對于RGB565圖像,使用其他每個通道。每個通道的bin計數必須大于2。 另外,將bin計數設置為大于每個通道的唯一像素值的數量是沒有意義的。 默認情況下,直方圖將具有每個通道的最大bin數。
不支持壓縮圖像和bayer圖像。
`image.``get_regression`(*thresholds*\[,*invert=False*\[,*roi*\[,*x\_stride=2*\[,*y\_stride=1*\[,*area\_threshold=10*\[,*pixels\_threshold=10*\[,*robust=False*\]\]\]\]\]\]\])
對圖像所有閾值像素進行線性回歸計算。這一計算通過最小二乘法進行,通常速度較快,但不能處理任何異常值。 若`robust`為True,則使用Theil-Sen線性回歸算法,它計算圖像中所有閾值像素的斜率的中位數。 若在閾值處理后有太多像素,即使在80x60的圖像上,這個O(N^2)操作也可能將您的FPS降到5幀以下。 但是,只要閾值轉換后的像素數量較少,即使在高達30%的閾值像素是異常值的情況下也依然有效,魯棒性好。
這一方法返回的是一個`image.line`對象。如何輕松運用直線對象,
`thresholds`必須是元組列表。`[(lo,hi),(lo,hi),...,(lo,hi)]`定義你想追蹤的顏色范圍。 對于灰度圖像,每個元組需要包含兩個值 - 最小灰度值和最大灰度值。 僅考慮落在這些閾值之間的像素區域。 對于RGB565圖像,每個元組需要有六個值(l\_lo,l\_hi,a\_lo,a\_hi,b\_lo,b\_hi) - 分別是LAB L,A和B通道的最小值和最大值。 為方便使用,此功能將自動修復交換的最小值和最大值。 此外,如果元組大于六個值,則忽略其余值。相反,如果元組太短,則假定其余閾值處于最大范圍。
注解
獲取所跟蹤對象的閾值,只需在IDE幀緩沖區中選擇(單擊并拖動)跟蹤對象。 直方圖會相應地更新到所在區域。然后只需寫下顏色分布在每個直方圖通道中起始與下降位置。 這些將是`thresholds`的低值和高值。 由于上下四分位數據相差微小,故手動確定閾值為佳。
您還可以通過進入OpenMV IDE中的`工具->機器視覺->閾值編輯器`并從GUI窗口中拖動滑塊來確定顏色閾值。
`invert`反轉閾值操作,像素在已知顏色范圍之外進行匹配,而非在已知顏色范圍內。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
`x_stride`是調用函數時要跳過的x像素數。
`y_stride`是調用函數時要跳過的y像素數。
如果回歸后的邊界框區域小于`area_threshold`,則返回None。
如果回歸后的像素數小于`pixel_threshold`,則返回None。
不支持壓縮圖像和bayer圖像。
`image.``find_blobs`(*thresholds*\[,*invert=False*\[,*roi*\[,*x\_stride=2*\[,*y\_stride=1*\[,*area\_threshold=10*\[,*pixels\_threshold=10*\[,*merge=False*\[,*margin=0*\[,*threshold\_cb=None*\[,*merge\_cb=None*\]\]\]\]\]\]\]\]\]\])
查找圖像中所有色塊,并返回一個包括每個色塊的色塊對象的列表。請觀察`image.blob`對象以獲取更多信息。
`thresholds`必須是元組列表。`[(lo,hi),(lo,hi),...,(lo,hi)]`定義你想追蹤的顏色范圍。 對于灰度圖像,每個元組需要包含兩個值 - 最小灰度值和最大灰度值。 僅考慮落在這些閾值之間的像素區域。 對于RGB565圖像,每個元組需要有六個值(l\_lo,l\_hi,a\_lo,a\_hi,b\_lo,b\_hi) - 分別是LAB L,A和B通道的最小值和最大值。 為方便使用,此功能將自動修復交換的最小值和最大值。 此外,如果元組大于六個值,則忽略其余值。相反,如果元組太短,則假定其余閾值處于最大范圍。
注解
獲取所跟蹤對象的閾值,只需在IDE幀緩沖區中選擇(單擊并拖動)跟蹤對象。 直方圖會相應地更新到所在區域。然后只需寫下顏色分布在每個直方圖通道中起始與下降位置。 這些將是`thresholds`的低值和高值。 由于上下四分位數據相差微小,故手動確定閾值為佳。
您還可以通過進入OpenMV IDE中的`工具->機器視覺->閾值編輯器`并從GUI窗口中拖動滑塊來確定顏色閾值。
`invert`反轉閾值操作,像素在已知顏色范圍之外進行匹配,而非在已知顏色范圍內。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
`x_stride`是查找某色塊時需要跳過的x像素的數量。找到色塊后,直線填充算法將精確像素。 若已知色塊較大,可增加`x_stride`來提高查找色塊的速度。
`y_stride`是查找某色塊時需要跳過的y像素的數量。找到色塊后,直線填充算法將精確像素。 若已知色塊較大,可增加`y_stride`來提高查找色塊的速度。
若一個色塊的邊界框區域小于`area_threshold`,則會被過濾掉。
若一個色塊的像素數小于`pixel_threshold`,則會被過濾掉。
`merge`若為True,則合并所有沒有被過濾掉的色塊,這些色塊的邊界矩形互相交錯重疊。`margin`可在相交測試中用來增大或減小色塊邊界矩形的大小。例如:邊緣為1、相互間邊界矩形為1的色塊將被合并。
合并色塊使顏色代碼追蹤得以實現。每個色塊對象有一個代碼值`code`,該值為一個位向量。 例如:若您在`image.find_blobs`中輸入兩個顏色閾值,則第一個閾值代碼為1,第二個代碼為2(第三個代碼為4,第四個代碼為8,以此類推)。 合并色塊對所有的code使用邏輯或運算,以便您知道產生它們的顏色。這使得您可以追蹤兩個顏色,若您用兩種顏色得到一個色塊對象,則可能是一種顏色代碼。
若您使用嚴格的顏色范圍,無法完全追蹤目標對象的所有像素,您可能需要合并色塊。
最后,若您想要合并色塊,但不想兩種不同閾值顏色的色塊被合并,只需分別兩次調用`image.find_blobs`,不同閾值色塊就不會被合并。
`threshold_cb`可設置為用以調用閾值篩選后的每個色塊的函數,以便將其從將要合并的色塊列表中過濾出來。 回調函數將收到一個參數:要被篩選的色塊對象。然后回調函數需返回True以保留色塊或返回False以過濾色塊。
`merge_cb`可設置為用以調用兩個即將合并的色塊的函數,以禁止或準許合并。回調函數將收到兩個參數—兩個將被合并的色塊對象。 回調函數須返回True以合并色塊,或返回False以防止色塊合并。
不支持壓縮圖像和bayer圖像。
`image.``find_lines`(\[*roi*\[,*x\_stride=2*\[,*y\_stride=1*\[,*threshold=1000*\[,*theta\_margin=25*\[,*rho\_margin=25*\]\]\]\]\]\])
使用霍夫變換查找圖像中的所有直線。返回一個`image.line`對象的列表。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。操作范圍僅限于`roi`區域內的像素。
`x_stride`是霍夫變換時需要跳過的x像素的數量。若已知直線較大,可增加`x_stride`。
`y_stride`是霍夫變換時需要跳過的y像素的數量。若已知直線較大,可增加`y_stride`。
`threshold`控制從霍夫變換中監測到的直線。只返回大于或等于`threshold`的直線。 應用程序的正確的`threshold`值取決于圖像。注意:一條直線的模(magnitude)是組成直線所有sobel濾波像素大小的總和。
`theta_margin`控制所監測的直線的合并。 直線角度為`theta_margin`的部分和直線p值為`rho_margin`的部分合并。
`rho_margin`控制所監測的直線的合并。 直線角度為`theta_margin`的部分和直線p值為`rho_margin`的部分合并。
該方法通過在圖像上運行索貝爾濾波器,并利用該濾波器的幅值和梯度響應來進行霍夫變換。 無需對圖像進行任何預處理。但是,清理圖像過濾器可得到更為穩定的結果。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``find_line_segments`(\[*roi*\[,*merge\_distance=0*\[,*max\_theta\_difference=15*\]\]\])
使用霍夫轉換來查找圖像中的線段。返回一個?`image.line`對象的列表。
`roi`是一個用以復制的矩形的感興趣區域(x, y, w, h)。如果未指定,`ROI`即圖像矩形。操作范圍僅限于roi區域內的像素。
`merge_distance`指定兩條線段之間的可以相互分開而不被合并的最大像素數。
`max_theta_difference`是上面`merge_distancede`要合并的的兩個線段的最大角度差值。
此方法使用LSD庫來查找圖像中的線段。這有點慢,但是非常準確,線段不會跳躍。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``find_circles`(\[*roi*\[,*x\_stride=2*\[,*y\_stride=1*\[,*threshold=2000*\[,*x\_margin=10*\[,*y\_margin=10*\[,*r\_margin=10*\[,*r\_min=2*\[,*r\_max*\[,*r\_step=2*\]\]\]\]\]\]\]\]\]\])
使用霍夫變換在圖像中查找圓。返回一個`image.circle`對象列表(見上)。
`roi`是一個用以復制的矩形的感興趣區域(x, y, w, h)。如果未指定,`ROI`即圖像矩形。操作范圍僅限于roi區域內的像素。
`x_stride`是霍夫變換時需要跳過的x像素的數量。若已知圓較大,可增加`x_stride`。
`y_stride`是霍夫變換時需要跳過的y像素的數量。若已知圓較大,可增加`y_stride`。
`threshold`控制從霍夫變換中監測到的圓。只返回大于或等于`threshold`的圓。 應用程序的正確的`threshold`值取決于圖像。注意:一個圓的大小(magnitude)是組成圓所有索貝爾濾波像素大小的總和。
`x_margin`控制所檢測的圓的合并。?圓像素為`x_margin`、`y_margin`和`r_margin`?的部分合并。
`y_margin`控制所檢測的圓的合并。?圓像素為`x_margin`、`y_margin`和`r_margin`?的部分合并。
`r_margin`控制所檢測的圓的合并。?圓像素為`x_margin`、`y_margin`和`r_margin`?的部分合并。
`r_min`controls the minimum circle radius detected. Increase this to speed up the algorithm. Defaults to 2.
`r_max`controls the maximum circle radius detected. Decrease this to speed up the algorithm. Defaults to min(roi.w/2, roi.h/2).
`r_step`controls how to step the radius detection by. Defaults to 2.
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``find_rects`(\[*roi=Auto*,*threshold=10000*\])
使用用于查找AprilTAg的相同的quad detection算法來查找圖像中的矩形。 最適用與背景形成鮮明對比的矩形。AprilTag的quad detection可以處理任意縮放/旋轉/剪切的矩形。 返回一個`image.rect`對象的列表。
`roi`?是一個用以復制的矩形的感興趣區域(x, y, w, h)。如果未指定, ROI即圖像矩形。操作范圍僅限于`roi`區域內的像素。
邊界大小(通過在矩形邊緣上的所有像素上滑動索貝爾算子并相加該值)小于?`threshold`的矩形會從返回列表中過濾出來。`threshold`的正確值取決于您的應用程序/場景。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``find_qrcodes`(\[*roi*\])
查找`roi`內的所有二維碼并返回一個`image.qrcode`對象的列表。 請參考`image.qrcode`對象以獲取更多信息。
為使這一方法成功運行,圖像上二維碼需比較平展。通過使用`sensor.set_windowing`?函數在鏡頭中心放大、`image.lens_corr`?函數來消解鏡頭的桶形畸變或通過更換視野較為狹小的鏡頭, 您可得到一個不受鏡頭畸變影響的更為平展的二維碼。有些機器視覺鏡頭不會造成桶形失真,但是其造價遠比OpenMV提供的標準鏡片高,這種鏡頭為無畸變鏡頭。
`roi`?是一個用以復制的矩形的感興趣區域(x, y, w, h)。如果未指定,ROI即整幅圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``find_apriltags`(\[*roi*\[,*families=image.TAG36H11*\[,*fx*\[,*fy*\[,*cx*\[,*cy*\]\]\]\]\]\])
查找`roi`內的所有AprilTag, 并返回一個`image.apriltag`對象的列表。請參考?`image.apriltag`對象以獲取更多信息。
與二維碼相比,AprilTags可在更遠距離、較差光線和更扭曲的圖像環境下被檢測到。 AprilTags可應對所有種類的圖像失真問題,而二維碼并不能。也就是說,AprilTags只能將數字ID編碼作為其有效載荷。
AprilTags也可用于本地化。每個`image.apriltag`對象都從攝像機返回其三維位置信息和旋轉角度。 位置信息由`fx`、`fy`、`cx`和`cy`決定,分別為X和Y方向上圖像的焦距和中心點。
注解
使用OpenMV IDE內置的標簽生成器工具來創建AprilTags。標簽生成器可創建可打印的8.5“x11”AprilTags。
`roi`?是一個用以復制的矩形的感興趣區域(x, y, w, h)。如果未指定,ROI即整幅圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
`families`是要解碼的標簽家族的位掩碼。是一個邏輯或:
> * `image.TAG16H5`
> * `image.TAG25H7`
> * `image.TAG25H9`
> * `image.TAG36H10`
> * `image.TAG36H11`
> * `image.ARTOOLKIT`
默認設置為最好用的?`image.TAG36H11`標簽家族。注意:每啟用一個標簽家族,`find_apriltags`的速度都會略有放慢。
`fx`是以像素為單位的相機x方向的焦距。標準OpenMV Cam的值為(2.8 / 3.984) \* 656, 該值通過毫米計的焦距值除以X方向上感光元件的長度,再乘以X方向上感光元件的像素數量得來(對OV7725感光元件而言)。
`fy`是以像素為單位的相機y方向的焦距。標準OpenMV Cam的值為(2.8 / 2.952) \* 488, 該值通過毫米計的焦距值除以Y方向上感光元件的長度,再乘以Y方向上感光元件的像素數量得來(對OV7725感光元件而言)。
`cx`是圖像的中心,即`image.width()/2`,而非`roi.w()/2`。
`cy`是圖像的中心,即`image.height()/2`,而非`roi.h()/2`。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``find_datamatrices`(\[*roi*\[,*effort=200*\]\])
查找`roi`內的所有數據矩陣并返回一個`image.datamatrix`對象的列表。 請參考`image.datamatrix`對象以獲取更多信息。
為使這一方法成功運行,圖像上矩形碼需比較平展。通過使用`sensor.set_windowing`函數在鏡頭中心放大、`image.lens_corr`?函數來消解鏡頭的桶形畸變或通過更換視野較為狹小的鏡頭,您可得到一個不受鏡頭畸變影響的更為平展的矩形碼。 有些機器視覺鏡頭不會造成桶形失真,但是其造價遠比OpenMV提供的標準鏡片高,這種鏡頭是無畸變鏡頭。
`roi`是一個用以復制的矩形的感興趣區域(x, y, w, h)。如果未指定,ROI即整幅圖像的圖像矩形。操作范圍僅限于`roi`區域內的像素。
`effort`控制用于查找矩形碼匹配的時間。默認值為200應該適用于所有用例。 但是您也可能以幀速率為代價增加檢測,或以檢測為代價增加幀速率。 注意:若`effort`設置在約160以下,您就無法進行任何檢測;相反,您可將其設置為您需要的任何高值,但是若設置值高于240,檢測率將不會繼續隨之提高。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``find_barcodes`(\[*roi*\])
查找`roi`內所有一維條形碼并返回一個`image.barcode`對象列表。 請參考?`image.barcode`對象以獲取更多信息。
為了獲得最佳效果,請使用長640、寬40/80/160窗口。垂直程度越低,運行速度越快。由于條形碼是線性一維圖像,所以只需在一個方向上有較高分辨率, 而在另一方向上只需較低分辨率。注意:該函數進行水平和垂直掃描,所以您可使用寬40/80/160、長480的窗口。 最后,請一定調整鏡頭,這樣條形碼會定位在焦距產生最清晰圖像的地方。模糊條碼無法被解碼。
該函數支持所有一維條形碼:
> * `image.EAN2`
> * `image.EAN5`
> * `image.EAN8`
> * `image.UPCE`
> * `image.ISBN10`
> * `image.UPCA`
> * `image.EAN13`
> * `image.ISBN13`
> * `image.I25`
> * `image.DATABAR`
> * `image.DATABAR_EXP`
> * `image.CODABAR`
> * `image.CODE39`
> * `image.PDF417`
> * `image.CODE93`
> * `image.CODE128`
`roi`是一個用以復制的矩形的感興趣區域(x, y, w, h)。如果未指定,ROI即整幅圖像的圖像矩形。操作范圍僅限于`roi`區域內的像素。
不支持壓縮圖像和bayer圖像。
此方法在OpenMV Cam M4 上不可用。
`image.``find_displacement`(*template*\[,*roi*\[,*template\_roi*\[,*logpolar=False*\]\]\])
從模板中查找此圖像的變換偏移量。 這種方法可以用來做光流。 此方法返回一個`image.displacement`對象,其中包含使用相位相關的位移計算結果。
`roi`是需要處理的矩形區域(x,y,w,h)。如果未指定,則等于圖像矩形。
`template_roi`是需要處理的矩形區域(x,y,w,h)。如果未指定,則等于圖像矩形。
`roi`和`template`roi必須具有相同的w/h,但x/y可以為圖像任意位置。您可以在較大圖像上滑動較小的rois以獲得光流漸變圖像.
`image.find_displacement`通常計算兩個圖像之間的x/y平移。但是,如果您設置`logpolar=True`, 它將會在兩個圖像之間找到旋轉和縮放比例的變化。相同的`image.displacement`對象結果兩種可能的反饋。
不支持壓縮圖像和bayer圖像。
注解
請在長寬一致的圖像(例如``sensor.B64X64``)上使用此方法。
此方法在OpenMV Cam M4 上不可用。
`image.``find_number`(*roi*)
運行在MINST數據集上訓練的LENET-6 CNN(卷積神經網絡),以檢測位于圖像上任何位置的28x28 ROI中的數字。 返回一個包含整數和浮點數的元組,表示檢測到的數字(0-9)和檢測的置信度(0-1)。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
僅支持灰度圖像。
注解
這種方法是實驗性的。如果未來運行使用Caffe在PC上訓練的任何CNN,這種方法可能會刪除。 最新3.0.0版本固件已刪除此函數。
此方法在OpenMV Cam M4 上不可用。
`image.``classify_object`(*roi*)
在圖像的ROI上運行CIFAR-10 CNN,以檢測飛機,汽車,鳥類,貓,鹿,狗,青蛙,馬,船和卡車。 此方法在內部自動將圖像縮放到32x32以饋送到CNN。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
僅支持RGB565圖像。
注解
這種方法是實驗性的。如果未來運行使用Caffe在PC上訓練的任何CNN,這種方法可能會刪除。
`image.``find_template`(*template*,*threshold*\[,*roi*\[,*step=2*\[,*search=image.SEARCH\_EX*\]\]\])
嘗試使用歸一化互相關(NCC)算法在圖像中找到第一個模板匹配的位置。返回匹配位置的邊界框元組(x, y, w, h),否則返回None。
`template`是一個與這個圖像對象相匹配的小圖像對象。注意:兩圖像須都為灰度圖。
`threshold`是浮點數(0.0-1.0),其中較小的值在提高檢測速率同時增加誤報率。相反,較高的值會降低檢測速率,同時降低誤報率。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
`step`是查找模板時需要跳過的像素數量。跳過像素可大大提高算法運行的速度。該方法只適用于SERACH\_EX模式下的算法。
`search`可為`image.SEARCH_DS`or`image.SEARCH_EX`.`image.SEARCH_DS`搜索模板所用算法較`image.SEARCH_EX`更快,但若模板位于圖像邊緣周圍,可能無法成功搜索。`image.SEARCH_EX`?可對圖像進行較為詳盡的搜索,但其運行速度遠低于`image.SEARCH_DS`。
僅支持灰度圖像。
`image.``find_features`(*cascade*\[,*threshold=0.5*\[,*scale=1.5*\[,*roi*\]\]\])
這個方法搜索與Haar Cascade匹配的所有區域的圖像,并返回一個關于這些特征的邊界框矩形元組(x,y,w,h)的列表。若未發現任何特征,則返回一個空白列表。
`cascade`是一個Haar Cascade對象。詳細信息請查看`image.HaarCascade()`。
`threshold`是浮點數(0.0-1.0),其中較小的值在提高檢測速率同時增加誤報率。相反,較高的值會降低檢測速率,同時降低誤報率。
`scale`是一個必須大于1.0的浮點數。較高的比例因子運行更快,但其圖像匹配相應較差。理想值介于1.35-1.5之間。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
`image.``find_eye`(*roi*)
在眼睛周圍的感興趣區域(x, y, w, h)查找瞳孔。返回一個包含圖像中瞳孔(x,y)位置的元組。若未發現瞳孔,則返回(0,0)。
使用這一函數之前,需首先使用`image.find_features()`和Haar算子`frontalface`?來搜索某人面部。 然后使用`image.find_features`和Haar算子`find_eye`在面部搜索眼睛。 最后,在調用`image.find_features`函數后返回的每個眼睛ROI上調用這一方法,以得到瞳孔的坐標。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
僅支持灰度圖像。
`image.``find_lbp`(*roi*)
從ROI元組(x, y, w, h)中提取LBP(局部二值模式)鍵點。您可以使用`image.match_descriptor`函數來比較兩組關鍵點,以獲取匹配距離。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
僅支持灰度圖像。
`image.``find_keypoints`(\[*roi*\[,*threshold=20*\[,*normalized=False*\[,*scale\_factor=1.5*\[,*max\_keypoints=100*\[,*corner\_detector=image.CORNER\_AGAST*\]\]\]\]\]\])
從ROI元組(x, y, w, h)中提取ORB鍵點。您可以使用`image.match_descriptor`函數來比較兩組關鍵點,以獲取匹配區域。若未發現關鍵點,則返回None。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
`threshold`是控制提取的數量的數字(取值0-255)。對于默認的AGAST角點檢測器,該值應在20左右。 對于FAST角點檢測器,該值約為60-80。閾值越低,您提取的角點越多。
`normalized`是布爾值。若為True,在多分辨率下關閉提取鍵點。 若您不關心處理擴展問題,且希望算法運行更快,就將之設置為True。
`scale_factor`是一個必須大于1.0的浮點數。較高的比例因子運行更快,但其圖像匹配相應較差。理想值介于1.35-1.5之間。
`max_keypoints`是一個鍵點對象所能容納的鍵點最大數量。若鍵點對象過大導致內存問題,請降低該值。
`corner_detector`是從圖像中提取鍵點所使用的角點檢測器算法。 可為`image.CORNER_FAST`。FAST角點檢測器運行速度更快,但其準確度較低。
僅支持灰度圖像。
`image.``find_edges`(*edge\_type*\[,*threshold*\])
將圖像變為黑白,僅將邊緣保留為白色像素。
> * image.EDGE\_SIMPLE - 簡單的閾值高通濾波算法
> * image.EDGE\_CANNY - Canny邊緣檢測算法
`threshold`是一個包含一個低閾值和一個高閾值的二值元組。您可以通過調整該值來控制邊緣質量。
默認為 (100, 200)。
僅支持灰度圖像。
`find_hog`(\[*roi*\[,*size=8*\]\])
用HOG(定向梯度直方圖)線替換ROI中的像素。
`roi`是感興趣區域的矩形元組(x,y,w,h)。如果未指定,ROI即整個圖像的圖像矩形。 操作范圍僅限于`roi`區域內的像素。
僅支持灰度圖像。
此方法在OpenMV Cam M4 上不可用。
## 常量
`image.``SEARCH_EX`
詳盡的模板匹配搜索。
`image.``SEARCH_DS`
更快的模板匹配搜索。
`image.``EDGE_CANNY`
使用Canny邊緣檢測算法對圖像進行邊緣檢測。
`image.``EDGE_SIMPLE`
使用閾值高通濾波算法對圖像進行邊緣檢測。
`image.``CORNER_FAST`
用于ORB鍵點的高速低準確率角點檢測算法
`image.``CORNER_AGAST`
用于ORB鍵點的低速高準確率算法。
`image.``TAG16H5`
TAG1H5標簽群的位掩碼枚舉。用于AprilTags。
`image.``TAG25H7`
TAG25H7標簽群的位掩碼枚舉。用于AprilTags。
`image.``TAG25H9`
TAG25H9標簽群的位掩碼枚舉。用于AprilTags。
`image.``TAG36H10`
TAG36H10標簽群的位掩碼枚舉。用于AprilTags。
`image.``TAG36H11`
TAG36H11標簽群的位掩碼枚舉。用于AprilTags。
`image.``ARTOOLKIT`
ARTOOLKIT標簽群的位掩碼枚舉。用于AprilTags。
`image.``EAN2`
EAN2條形碼類型枚舉。
`image.``EAN5`
EAN5條形碼類型枚舉。
`image.``EAN8`
EAN8條形碼類型枚舉。
`image.``UPCE`
UPCE條形碼類型枚舉。
`image.``ISBN10`
ISBN10條形碼類型枚舉。
`image.``UPCA`
UPCA條形碼類型枚舉。
`image.``EAN13`
EAN13條形碼類型枚舉。
`image.``ISBN13`
ISBN13條形碼類型枚舉。
`image.``I25`
I25條形碼類型枚舉。
`image.``DATABAR`
DATABAR條形碼類型枚舉。
`image.``DATABAR_EXP`
DATABAR\_EXP條形碼類型枚舉。
`image.``CODABAR`
CODABAR條形碼類型枚舉。
`image.``CODE39`
CODE39條形碼類型枚舉。
`image.``PDF417`
PDF417條形碼類型枚舉(目前尚不能運行)。
`image.``CODE93`
CODE93條形碼類型枚舉。
`image.``CODE128`
CODE128條形碼類型枚舉。
- 簡介
- 關于MixPY
- 準備
- MixPY_函數庫
- MicroPython標準庫
- gc _控制垃圾回收器
- math_數學函數
- sys_系統相關函數
- ubinascii _ 二進制/ ASCII轉換
- ucollections_集合和容器類型
- uerrno _系統錯誤代碼
- uheapq_ 堆隊列算法
- ujson_JSON編碼與解碼
- uos _基本的“操作系統”服務
- ure_正則表達式
- MixPY_特定函數
- lcd_顯示驅動
- lcd_范例
- sensor_感光元件
- sensor_范例
- image_機器視覺
- image_函數
- HaarCascade 類_特征描述符
- Similarity 類_相似度對象
- Histogram 類_直方圖對象
- Percentile 類_百分比值對象
- Threhsold 類_閾值對象
- Statistics 類_統計數據對象
- Blob 類_色塊對象
- Line 類_直線對象
- Circle 類_圓形對象
- Rect 類_矩形對象
- QRCode 類_ 二維碼對象
- AprilTag 類_AprilTag對象
- DataMatrix 類_數據矩陣對象
- BarCode 類_條形碼對象
- Displacement 類_位移對象
- Kptmatch 類_特征點對象
- ImageWriter 類_ImageWriter對象
- ImageReader 類_ImageReader對象
- Image 類_圖像對象
- touchscreen_觸摸屏幕
- touchscreen_范例
- video_視頻
- video_范例
- audio_音頻
- audio_范例
- nes_游戲模擬器
- nes_范例
- machine_板級功能
- I2C_總線協議
- I2C_范例
- PWM_脈寬調制
- PWM_范例
- SPI_同步串行協議
- SPI_范例
- Timer_硬件定時器
- Timer_范例
- UART_異步串口
- UART_范例
- network_網卡驅動
- network_范例
- Maix_功能庫
- FPIOA_可編程 IO 陣列
- FPIOA_范例
- GPIO_通用輸入/輸出
- GPIO_范例
- I2S_驅動I2S設備
- I2S_范例
- freq_頻率模塊
- freq_范例
- FFT_傅里葉運算
- FFT_范例
- KPU_神經網絡處理器
- KPU_范例