目录
sensor.set_auto_exposure(enable[\, exposure_us])
image.get_statistics(roi=Auto)
一、感光元件----sensor
sensor.reset()
----初始化感光元件
sensor.reset()
的功能包括:
-
初始化感光元件: 将摄像头感光元件初始化为默认状态,以确保其处于可用的工作状态。
-
恢复默认设置: 将摄像头的其他配置参数还原为默认值。这包括图像格式、帧大小等设置。
使用 sensor.reset()
可以在每次程序启动或需要重置摄像头状态时调用,以确保摄像头处于一致的状态。
sensor.reset()
被用于初始化感光元件,这是配置摄像头之前的一项重要步骤。在初始化后,可以通过其他函数来设置摄像头的像素格式、帧大小等参数,以适应应用场景。
sensor.set_pixformat()
----设置像素模式。
- sensor.GRAYSCALE: 灰度,每个像素8bit。
- sensor.RGB565: 彩色,每个像素16bit。
1.sensor.GRAYSCALE
是一个常量,用于设置摄像头图像的像素格式为灰度模式。在这个模式下,每个像素用 8 位表示,范围从 0 到 255,其中 0 表示黑色,255 表示白色。
如果想将摄像头配置为捕获灰度图像,可以使用以下代码:
sensor.set_pixformat(sensor.GRAYSCALE)
这样设置后,摄像头将以灰度模式捕获图像,每个像素只包含亮度信息而没有颜色信息。这种模式通常用于对图像中的亮度变化进行分析,而不需要考虑颜色信息。
2.sensor.RGB565
是一个常量,用于设置摄像头图像的像素格式为 RGB565 彩色模式。在这个模式下,每个像素用 16 位表示,其中红色占用 5 位,绿色占用 6 位,蓝色占用 5 位。这样的格式提供了对颜色更细致的描述,适用于彩色图像。
如果你想将摄像头配置为以 RGB565 彩色模式捕获图像,可以使用以下代码:
sensor.set_pixformat(sensor.RGB565)
这样设置后,摄像头将以彩色模式捕获图像,每个像素包含红、绿、蓝三个颜色通道的信息。这使得你可以在图像处理和分析中考虑颜色信息。
sensor.set_framesize()
----设置图像的大小
sensor.set_framesize()
是一个函数,用于设置摄像头捕获图像的大小(帧大小)。通过调用这个函数,可以指定所需的图像分辨率。
设置图像大小对于应用程序非常重要,因为它会影响图像的清晰度、文件大小以及后续处理的计算成本。选择适当的图像大小取决于你的具体需求和系统资源。
- sensor.QQCIF: 88x72
- sensor.QCIF: 176x144
- sensor.CIF: 352x288
- sensor.QQSIF: 88x60
- sensor.QSIF: 176x120
- sensor.SIF: 352x240
- sensor.QQQQVGA: 40x30
- sensor.QQQVGA: 80x60
- sensor.QQVGA: 160x120
- sensor.QVGA: 320x240
- sensor.VGA: 640x480
- sensor.HQQQVGA: 80x40
- sensor.HQQVGA: 160x80
- sensor.HQVGA: 240x160
- sensor.B64X32: 64x32 (用于帧差异 image.find_displacement())
- sensor.B64X64: 64x64 用于帧差异 image.find_displacement())
- sensor.B128X64: 128x64 (用于帧差异 image.find_displacement())
- sensor.B128X128: 128x128 (用于帧差异 image.find_displacement())
- sensor.LCD: 128x160 (用于LCD扩展板)
- sensor.QQVGA2: 128x160 (用于LCD扩展板)
- sensor.WVGA: 720x480 (用于 MT9V034)
- sensor.WVGA2:752x480 (用于 MT9V034)
- sensor.SVGA: 800x600 (仅用于 OV5640 感光元件)
- sensor.XGA: 1024x768 (仅用于 OV5640 感光元件)
- sensor.SXGA: 1280x1024 (仅用于 OV5640 感光元件)
- sensor.UXGA: 1600x1200 (仅用于 OV5640 感光元件)
- sensor.HD: 1280x720 (仅用于 OV5640 感光元件)
- sensor.FHD: 1920x1080 (仅用于 OV5640 感光元件)
- sensor.QHD: 2560x1440 (仅用于 OV5640 感光元件)
- sensor.QXGA: 2048x1536 (仅用于 OV5640 感光元件)
- sensor.WQXGA: 2560x1600 (仅用于 OV5640 感光元件)
- sensor.WQXGA2: 2592x1944 (仅用于 OV5640 感光元件)
sensor.skip_frames(n=10)
----跳过一些帧
- sensor.skip_frames(n=10) 跳过n张照片,在更改设置后,跳过一些帧,等待感光元件变稳定。这在某些情况下很有用,例如当你需要等待摄像头稳定下来或跳过起始帧以减少噪音时。
sensor.snapshot()
----获取一张图像
- sensor.snapshot() 拍摄一张照片,返回一个image对象。
用于捕获当前摄像头的一帧图像并返回该图像的对象。这个函数在使用摄像头模块时非常常见,因为它允许你获取摄像头实时捕获的图像,并对其进行后续处理或分析。以下是一个简单的示例,演示了如何使用 sensor.snapshot()
函数:
import sensor
# 初始化摄像头
sensor.init()
# 捕获一帧图像
img = sensor.snapshot()
# 对图像进行处理或分析
# 这里可以添加任何你想要的图像处理代码
在这个例子中,使用 sensor.snapshot()
捕获了摄像头的一帧图像,并将其保存在 img
变量中。然后你可以在代码中使用 img
对象进行任何后续的图像处理或分析操作。
sensor.set_auto_gain()
----自动增益
自动增益开启(True)或者关闭(False)。在使用颜色追踪时,需要关闭自动增益。
自动增益控制(Automatic Gain Control,简称 AGC)。自动增益控制是一种摄像头功能,它可以调整图像的整体亮度,以适应不同的光照条件。
启用自动增益控制时,摄像头会自动调整增益,以确保图像的整体亮度在合适的范围内。在某些场景下,禁用自动增益控制可能更有利于精确控制图像亮度。具体的使用方式可以根据实际需求来调整。
sensor.set_auto_whitebal()
----自动白平衡
自动白平衡开启(True)或者关闭(False)。在使用颜色追踪时,需要关闭自动白平衡。
动白平衡功能(Automatic White Balance,简称 AWB)。自动白平衡是摄像头功能之一,它能够自动调整图像的色彩平衡,以适应不同光照条件下的环境。
启用自动白平衡功能时,摄像头会自动调整图像的色彩平衡,以消除不同光照条件下的色彩偏差。在某些情况下,禁用自动白平衡功能可能有助于更精确地控制图像的色彩效果。具体的使用方式应根据实际需求来确定。
sensor.set_auto_exposure(enable[\, exposure_us])
自动曝光功能(Automatic Exposure,简称 AE)。自动曝光是摄像头功能之一,它能够根据环境光照情况自动调整曝光时间,以确保捕获的图像在不同光照条件下具有适当的亮度。
enable
是一个布尔值,用于启用或禁用自动曝光功能。如果为True
,则表示启用自动曝光;如果为False
,则表示禁用自动曝光。exposure_us
是一个可选参数,表示手动设置的曝光时间,以微秒为单位。当enable
参数为False
时,可以提供这个参数来手动设置曝光时间。如果不提供exposure_us
参数,则曝光时间会保持在默认值。
以下是一些示例用法:
启用自动曝光:
import sensor
# 初始化摄像头
sensor.init()
# 启用自动曝光功能
sensor.set_auto_exposure(True)
禁用自动曝光并手动设置曝光时间:
import sensor
# 初始化摄像头
sensor.init()
# 禁用自动曝光功能,并设置曝光时间为 10000 微秒(10 毫秒)
sensor.set_auto_exposure(False, exposure_us=10000)
在这些示例中,根据实际需求,可以选择启用或禁用自动曝光功能,并选择是否手动设置曝光时间。
sensor.set_windowing(roi)
----设置窗口ROI
ROI:Region Of Interest,图像处理中的术语“感兴趣区”。就是在要处理的图像中提取出的要处理的区域。
sensor.set_windowing()
是一个函数,用于设置摄像头的窗口选取(Windowing)功能。窗口选取允许你指定摄像头采集图像的感兴趣区域(Region of Interest,简称 ROI),从而可以只采集感兴趣区域内的图像,而不是整个图像。
这个函数通常接受一个参数 roi
,用于指定感兴趣区域的位置和大小。roi
参数通常是一个元组或一个列表,其中包含四个值:(x, y, width, height)
,分别表示感兴趣区域的左上角坐标 (x, y)
和宽度、高度。
以下是一个示例用法:
import sensor
# 初始化摄像头
sensor.init()
# 设置感兴趣区域为从 (100, 100) 开始,宽度为 200,高度为 150
roi = (100, 100, 200, 150)
sensor.set_windowing(roi)
在这个示例中,感兴趣区域从图像的 (100, 100) 坐标开始,宽度为 200 像素,高度为 150 像素。摄像头将仅捕获和处理这个感兴趣区域内的图像,而不是整个图像。
窗口选取功能可以用于在处理或分析摄像头图像时,仅关注特定的区域,从而提高处理效率或减少处理的数据量。
sensor.set_hmirror(True)
----水平方向翻转
sensor.set_vflip(True)
----垂直方向翻转
更多sensor设置,详见OpenMV官方中文文档:sensor — 感光元件 — MicroPython 1.9.2 文档
二、图像----image
image.get_pixel(x, y)
image.set_pixel(x, y, pixel)
----获取/设置像素点
通过image.get_pixel(x, y)方法来获取一个像素点的值。
- image.get_pixel(x, y)
- 对于灰度图: 返回(x,y)坐标的灰度值.
- 对于彩色图: 返回(x,y)坐标的(r,g,b)的tuple.
通过image.set_pixel(x, y, pixel)方法,来设置一个像素点的值。
- image.set_pixel(x, y, pixel)
- 对于灰度图: 设置(x,y)坐标的灰度值。
- 对于彩色图: 设置(x,y)坐标的(r,g,b)的值。
举例:
img = sensor.snapshot()
img.get_pixel(10,10)
img.set_pixcel(10,10,(255,0,0))#设置坐标(10,10)的像素点为红色(255,0,0)
image.width()
image.height()
image.format()
image.size()
----获取图像的宽度和高度
-
image.width()
返回图像的宽度(像素) -
image.height()
返回图像的高度(像素) -
image.format()
灰度图会返回 sensor.GRAYSCALE,彩色图会返回 sensor.RGB565。 -
image.size()
返回图像的大小(byte)
图像运算:
image.invert()
image.nand(image)
image.nor(image)
image.xor(image)
image.xnor(image)
image.difference(image)
----图像的运算
- image.invert()
取反,对于二值化的图像,0(黑)变成1(白),1(白)变成0(黑)。
注:
图像可以是另一个image对象,或者是从 (bmp/pgm/ppm)文件读入的image对象。
两个图像都必须是相同的尺寸和类型(灰度图/彩色图)。
-
image.nand(image)
与另一个图片进行与非(NAND)运算。 -
image.nor(image)
与另一个图片进行或非(NOR)运算。 -
image.xor(image)
与另一个图片进行异或(XOR)运算。 -
image.xnor(image)
与另一个图片进行异或非(XNOR)运算。 -
image.difference(image)
从这张图片减去另一个图片。比如,对于每个通道的每个像素点,取相减绝对值操作。这个函数,经常用来做移动检测。
图像信息统计:
image.get_statistics(roi=Auto)
----使用图像的统计信息
image.get_statistics(roi=Auto)
其中roi是目标区域。注意,这里的roi,bins之类的参数,一定要显式地标明,例如:
img.get_statistics(roi=(0,0,10,20))
如果是 img.get_statistics((0,0,10,20)),ROI不会起作用。
-
statistics.mean() 返回灰度的平均数(0-255) (int)。你也可以通过statistics[0]获得。
-
statistics.median() 返回灰度的中位数(0-255) (int)。你也可以通过statistics[1]获得。
-
statistics.mode() 返回灰度的众数(0-255) (int)。你也可以通过statistics[2]获得。
-
statistics.stdev() 返回灰度的标准差(0-255) (int)。你也可以通过statistics[3]获得。
-
statistics.min() 返回灰度的最小值(0-255) (int)。你也可以通过statistics[4]获得。
-
statistics.max() 返回灰度的最大值(0-255) (int)。你也可以通过statistics[5]获得。
-
statistics.lq() 返回灰度的第一四分数(0-255) (int)。你也可以通过statistics[6]获得。
-
statistics.uq() 返回灰度的第三四分数(0-255) (int)。你也可以通过statistics[7]获得。
上面的是灰度的值,接下来的
- l_mean,l_median,l_mode,l_stdev,l_min,l_max,l_lq,l_uq,
- a_mean,a_median,a_mode,a_stdev,a_min,a_max,a_lq,a_uq,
- b_mean,b_median,b_mode,b_stdev,b_min,b_max,b_lq,b_uq,
是LAB三个通道的平均数,中位数,众数,标准差,最小值,最大值,第一四分数,第三四分数。
在图像处理中,LAB色彩空间是一种颜色模型,它将颜色分解为三个通道:亮度(L),以及两个色度通道(a 和 b)。这种颜色空间是由国际照明委员会(CIE)于1976年定义的,旨在模拟人类视觉系统对颜色的感知方式。
下面是对LAB色彩空间中每个通道的简要说明:
-
L通道(亮度): 代表图像的亮度信息。这个通道的取值范围通常是 0 到 100(有时是 0 到 255),表示从黑到白的亮度变化。在L通道中,较高的值对应于较亮的像素,较低的值对应于较暗的像素。
-
a通道(色度): 代表图像中从绿色到红色的变化。负值表示绿色,正值表示红色。a通道的取值范围通常是 -128 到 127,其中 -128 表示最绿的颜色,而 127 表示最红的颜色。
-
b通道(色度): 代表图像中从蓝色到黄色的变化。负值表示蓝色,正值表示黄色。b通道的取值范围也通常是 -128 到 127,其中 -128 表示最蓝的颜色,而 127 表示最黄的颜色。
通过将颜色分解为亮度和色度通道,LAB色彩空间能够更好地模拟人类对颜色的感知,同时也更适合进行图像处理和分析,例如颜色校正、图像分割和对象检测等任务。
举例:
检测左上方的区域中的颜色值。
import sensor, image, time
sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(10) # 跳过10帧,使新设置生效
sensor.set_auto_whitebal(False) # Create a clock object to track the FPS.
ROI=(80,30,15,15)
while(True):
img = sensor.snapshot() # Take a picture and return the image.
statistics=img.get_statistics(roi=ROI)
color_l=statistics.l_mode()
color_a=statistics.a_mode()
color_b=statistics.b_mode()
print('L都众数:',color_l,'A的众数:',color_a,'B的众数:',color_b)
img.draw_rectangle(ROI)
画图:
img.draw_line()
----画线
img.draw_line((x0,y0,x1,y1),color ,thickness )
(x0, y0)
:线起点的坐标。(x1, y1)
:线的终点坐标。color
:线条的颜色。这可以是 RGB 元组或表示调色板中特定颜色的索引。thickness
:线条的粗细或宽度(以像素为单位)。
img.draw_arrow()
----画箭头
img.draw_arrow((x0,y0,x1,y1),color,thickness)
(x0, y0)
:箭头起点的坐标。(x1, y1)
:箭头终点的坐标。color
:箭头的颜色。这可以是 RGB 元组或表示调色板中特定颜色的索引。thickness
:箭头线条的粗细或宽度(以像素为单位)。
img.draw_circle()
----画圆
img.draw_circle(x,y,radius,color ,thickess,fill)
(x, y)
:圆心的坐标。radius
:圆的半径。color
:圆圈的颜色。这可以是 RGB 元组或表示调色板中特定颜色的索引。thickness
:圆轮廓的粗细或宽度(以像素为单位)。fill
:一个布尔值或整数值,指示是填充圆圈(如果为非零)还是仅绘制其轮廓(如果为零)。
image.draw_ellipse()
----画椭圆
image.draw_ellipse(cx,cy,rx,ry,rotation,color,thickness,fill)
cx
:椭圆中心点的 x 坐标。cy
:椭圆中心点的 y 坐标。rx
:椭圆水平轴(x 轴)的半长轴长度。ry
:椭圆垂直轴(y 轴)的半短轴长度。rotation
:椭圆相对于 x 轴的旋转角度(以度为单位)。如果rotation
是零,则椭圆与 x 轴对齐。color
:绘制椭圆的颜色,可以是颜色名称(如 “red”、“green”、“blue”)或 RGB 元组。thickness
:椭圆轮廓线的宽度(像素单位)。如果 是负数或为零,则椭圆将被填充。thickness
fill
:一个布尔值或整数,表示是否填充椭圆。如果为非零值,表示填充椭圆;如果为零,表示仅绘制椭圆的轮廓。
img.draw_rectangle()
----画框
img.draw_rectangle((x0,y0,x1,y1),color,thickness,fill)
(x0, y0)
:矩形左上角的坐标。(x1, y1)
:矩形右下角的坐标。color
:矩形的颜色。这可以是 RGB 元组或表示调色板中特定颜色的索引。thickness
:矩形轮廓的粗细或宽度(以像素为单位)。fill
:一个布尔值或整数值,指示是填充矩形(如果为非零)还是仅绘制其轮廓(如果为零)。
img.draw_cross()
----画十字
img.draw_cross(x0,y0,color,size,thickness)
(x0, y0)
:十字架中心的坐标。color
:十字架的颜色。这可以是 RGB 元组或表示调色板中特定颜色的索引。size
:横臂的长短(水平和垂直),通常以像素为单位。thickness
:组成十字架的线条的粗细或宽度。
img.draw_keypoints()
----画关键点
img.draw_keypoints(keypoints, color, , thickness, fill)
keypoints
:关键点的列表,每个关键点表示为一个三元组(x, y, rot)
,其中(x, y)
是关键点的坐标,rot
是关键点的旋转角度。color
:关键点的颜色,一个包含 RGB 分量的元组(r, g, b)
。默认为白色(255, 255, 255)
。size
:关键点的尺寸(直径),以像素为单位。默认为 20。thickness
:绘制关键点轮廓的线条粗细,以像素为单位。默认为 2。fill
:一个布尔值,指定是否填充关键点的内部。默认为 False,即只绘制轮廓。
img.draw_string()
----写字
img.draw_string(x,y,text,color,scale,x_spacing,y_spacing,mono_space,char_rotation,char_hmirror,char_vflip)
(x, y)
:文本起始位置的坐标。text
:要绘制的实际文本字符串。color
:文本的颜色。这可以是 RGB 元组或表示调色板中特定颜色的索引。scale
:文本大小的比例因子。x_spacing
:字符之间的水平间距。y_spacing
:文本行之间的垂直间距。mono_space
:一个布尔值或整数值,指示是否使用单倍行距(所有字符的间距相等)(如果为非零)。char_rotation
:每个字符的旋转角度。char_hmirror
:一个布尔值或整数值,指示是否水平镜像每个字符(如果为非零)。char_vflip
:一个布尔值或整数值,指示是否垂直翻转每个字符(如果为非零)。
img.draw_image()
----画图像
img.draw_image(image,x,y,x_scale,y_scale,roi,fgb_channel, alpha,color_palette,alpha_palette,hint,x_size,y_size)
image
: 要绘制的图像对象。x
: 绘制图像的起始 x 坐标。y
: 绘制图像的起始 y 坐标。x_scale
: 沿 x 轴的缩放因子。它可以用来调整要绘制的图像的宽度。默认值为 1,表示无缩放。y_scale
: 沿 y 轴的缩放因子。它可以用来调整要绘制的图像的高度。默认值为 1,表示无缩放。roi
: 一个元组(x, y, w, h)
,表示要从要绘制的图像中选择的感兴趣区域(Region of Interest)。默认为None
,表示绘制整个图像。fgb_channel
: 前景/背景通道掩码。它指定图像的哪些通道(颜色通道)应该被绘制。默认为None
,表示所有通道都应该被绘制。alpha
: 一个介于 0 到 255 之间的整数,表示绘制的透明度。0 表示完全透明,255 表示完全不透明。默认为None
,表示不使用 alpha 通道。color_palette
: 调色板索引数组。它用于将颜色值映射到调色板中的索引。默认为None
,表示不使用调色板。alpha_palette
: 透明度调色板索引数组。它用于将 alpha 值映射到调色板中的索引。默认为None
,表示不使用透明度调色板。hint
: 绘制提示,用于指示图像绘制的加速方式。默认为None
。x_size
: 指定绘制图像的大小。默认为None
,表示使用原始图像的大小。y_size
: 指定绘制图像的大小。默认为None
,表示使用原始图像的大小。
import sensor, image, time
sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(10) # 跳过10帧,使新设置生效
while(True):
img = sensor.snapshot() # Take a picture and return the image.
small_image = img.mean_pooled(4,4)
img.draw_line((10,10,10,20),color = (255,0,0),thickness = 2)
img.draw_arrow((10,30,10,60),color = (0,255,0),thickness = 2)
img.draw_circle(30,30,20,color = (0,0,255),thickess = 2,fill = 0)
img.draw_rectangle((50,10,50,40),color = (255,255,0),thickness = 2,fill = 1)
img.draw_cross(30,30,color = (255,0,255),size = 5,thickness = 2)
img.draw_keypoints([(75,65,10)],color = (255,255,255),size = 20,thickness = 1,fill =0)
img.draw_string(10,80,'123456789',color = (0,255,255))
img.draw_image(small_image,100,10)
常用颜色彩色值(r, g, b)的tupple:
- 红色(Red):(255, 0, 0)
- 绿色(Green):(0, 255, 0)
- 蓝色(Blue):(0, 0, 255)
- 黄色(Yellow):(255, 255, 0)
- 品红(Magenta):(255, 0, 255)
- 青色(Cyan):(0, 255, 255)
- 白色(White):(255, 255, 255)
- 黑色(Black):(0, 0, 0)
寻找色块:
image.find_blobs()
image.find_blobs()
是 OpenMV Cam 上的一个图像处理方法,用于在图像中查找颜色块(blobs)。颜色块通常表示图像中连续的、具有相似颜色的区域。这在许多计算机视觉应用中是一个常见的任务,如目标检测、跟踪和识别。
该方法的语法如下:
blobs = img.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False,
area_threshold=10, pixels_threshold=10, merge=False,
margin=0, threshold_cb=None, merge_cb=None)
参数解释如下:
thresholds
:颜色阈值,用于指定要查找的颜色范围。可以是单个阈值或一个颜色阈值列表,每个颜色阈值指定一个颜色通道的最小和最大阈值,如[(min1, max1), (min2, max2), ...]
。以下是在 RGB 颜色空间中常见颜色的一些阈值范围的示例。请注意,这些值是经验性的,具体的阈值可能需要根据实际场景和摄像头的特性进行调整。red_threshold = (200, 0, 0, 255, 100, 100) green_threshold = (0, 200, 0, 100, 255, 100) blue_threshold = (0, 0, 200, 100, 100, 255) yellow_threshold = (150, 150, 0, 255, 255, 100) purple_threshold = (150, 0, 150, 255, 100, 255) cyan_threshold = (0, 150, 150, 100, 255, 255)
roi
:感兴趣区域(Region of Interest),一个矩形区域,用于限制查找颜色块的范围。默认为整个图像(Auto)。x_stride
:X 轴步长,用于指定在图像中搜索颜色块时在 X 轴上的间隔。默认为 2。y_stride
:Y 轴步长,用于指定在图像中搜索颜色块时在 Y 轴上的间隔。默认为 1。invert
:一个布尔值,指定是否反转阈值。默认为 False。area_threshold
:颜色块的面积阈值,用于过滤掉面积小于此阈值的颜色块。默认为 10。pixels_threshold
:颜色块的像素阈值,用于过滤掉像素数量小于此阈值的颜色块。默认为 10。merge
:一个布尔值,指定是否合并相邻的颜色块。默认为 False。margin
:合并颜色块时的边界宽度,以像素为单位。默认为 0。threshold_cb
:阈值回调函数,用于设置动态阈值。merge_cb
:合并回调函数,用于设置自定义的颜色块合并规则。
该方法返回一个包含颜色块信息的列表,每个颜色块信息包含以下属性:
如果这个色块是红色,那么它的code就是0001,如果是蓝色,那么它的code就是0010。注意:一个blob可能是合并的,如果是红色和蓝色的blob,那么这个blob就是0011。这个功能可以用于查找颜色代码。也可以通过blob[8]来获取。
-
blob.rect() 返回这个色块的外框——矩形元组(x, y, w, h),可以直接在image.draw_rectangle中使用。
-
blob.x() 返回色块的外框的x坐标(int),也可以通过blob[0]来获取。
-
blob.y() 返回色块的外框的y坐标(int),也可以通过blob[1]来获取。
-
blob.w() 返回色块的外框的宽度w(int),也可以通过blob[2]来获取。
-
blob.h() 返回色块的外框的高度h(int),也可以通过blob[3]来获取。
-
blob.pixels() 返回色块的像素数量(int),也可以通过blob[4]来获取。
-
blob.cx() 返回色块的外框的中心x坐标(int),也可以通过blob[5]来获取。
-
blob.cy() 返回色块的外框的中心y坐标(int),也可以通过blob[6]来获取。
-
blob.rotation() 返回色块的旋转角度(单位为弧度)(float)。如果色块类似一个铅笔,那么这个值为0~180°。如果色块是一个圆,那么这个值是无用的。如果色块完全没有对称性,那么你会得到0~360°,也可以通过blob[7]来获取。
-
blob.code() 返回一个16bit数字,每一个bit会对应每一个阈值。举个例子:
blobs = img.find_blobs([red, blue, yellow], merge=True)
-
blob.count() 如果merge=True,那么就会有多个blob被合并到一个blob,这个函数返回的就是这个的数量。如果merge=False,那么返回值总是1。也可以通过blob[9]来获取。
-
blob.area() 返回色块的外框的面积。应该等于(w * h)
-
blob.density() 返回色块的密度。这等于色块的像素数除以外框的区域。如果密度较低,那么说明目标锁定的不是很好。
比如,识别一个红色的圆,返回的blob.pixels()是目标圆的像素点数,blob.area()是圆的外接正方形的面积。
通过调用 image.find_blobs()
方法,可以在图像中检测出符合指定颜色阈值的颜色块,并进一步分析这些颜色块的属性,如位置、大小和形状等。
示例:
import sensor
import image
# 初始化摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
# 定义黑色阈值
black_threshold = (0, 10, -128, 127, -128, 127)
while True:
# 捕获图像
img = sensor.snapshot()
# 寻找黑色色块
blobs = img.find_blobs([black_threshold], pixels_threshold=20, area_threshold=20)
# 如果找到了黑色色块
if blobs:
# 遍历每个黑色色块
for blob in blobs:
# 绘制黑色色块的边界矩形
img.draw_rectangle(blob.rect(), color=(255, 0, 0)) # 绘制红色矩形
# 打印黑色色块的位置和大小信息
print("Black blob found at:", blob.cx(), blob.cy(), "Size:", blob.pixels())