代码进入一个无限循环 (while True
),在其中连续捕获图像,对指定的 ROI 进行一些颜色统计,并打印 L、A 和 B 值的众数。
ROI
变量被定义为一个元组 (x, y, width, height)
,其中 x
和 y
是 ROI 的左上角坐标,width
和 height
是 ROI 的尺寸。这意味着 ROI 是从坐标 (80, 30) 开始的 15x15 像素区域。
sensor.snapshot()
函数捕获一张图像,并将其返回给变量 img
。
接下来的代码使用 img.get_statistics()
函数计算指定 ROI 内 L(亮度)、A 和 B(色度)值的众数,使用 l_mode()
、a_mode()
和 b_mode()
方法分别获取这些值。
最后,代码打印 L、A 和 B 值的众数,并使用 img.draw_rectangle(ROI)
在图像周围绘制一个矩形来标记感兴趣区域。
import sensor, image, time
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(10)#跳过10帧,使得设置生效
sensor.set_auto_whitebal(False)#关闭自动白平衡
ROI=(80,30,15,15)
while(True):
img = sensor.snapshot()
statistics=img.get_statistics(roi=ROI)
color_l=statistics.l_mode()
color_a=statistics.a_mode()
color_b=statistics.b_mode()
print(color_l,color_a,color_b)
img.draw_rectangle(ROI)
根据代码,L、A 和 B 的值是通过计算指定 ROI 内颜色值的众数得到的。
请注意,L、A 和 B 是 CIELAB 色彩空间中的颜色分量,L 表示亮度(Luminance),A 表示从绿色到红色的色度,B 表示从蓝色到黄色的色度。这些值可以用来表示图像中的颜色信息。
下面是官方文档的一些其它统计量,可以打印查看。
-
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三个通道的平均数,中位数,众数,标准差,最小值,最大值,第一四分数,第三四分数。