# 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_范例