单一颜色识别
1.实验目的
学习K230识别图片中指定的颜色。
2.实验原理
对图像的每个像素进行判断:是否满足某个颜色范围(阈值)——满足的就认为是目标颜色。
blobs = img.find_blobs([thresholds], area_threshold=area_threshold, pixels_threshold=pixels_threshold, merge=True, margin=0)
参数解释
- thresholds: 这是一个包含颜色范围的列表,用于定义要查找的斑点的颜色范围。通常是一个包含两个或三个元素的元组。例如,
(100, 200, -64, 127, -128, 127)
表示 HSV 颜色空间中的范围,其中第一个和第二个值是 Hue,第三和第四值是 Saturation,最后两个值是 Value。 - area_threshold: 斑点的面积阈值。只有面积大于这个值的斑点才会被返回。默认值是 0。
- pixels_threshold: 斑点的像素数阈值。只有包含的像素数大于这个值的斑点才会被返回。默认值是 0。
- merge: 是否合并相邻的斑点。设为
True
时,相邻的斑点会被合并成一个大斑点;设为False
时,斑点不会合并。默认值是True
。 - margin: 用于合并斑点时的边距。设置为一个正整数,表示合并斑点时的最大距离。默认值是 0。
返回值
find_blobs
函数返回一个包含斑点信息的列表。每个斑点都是一个 Blob
对象,通常包含以下属性:
cx
和cy
:斑点的中心坐标。x
和y
:斑点的左上角坐标。w
和h
:斑点的宽度和高度。area
:斑点的面积(像素数)。
3.代码解析
颜色阈值定义
thresholds = [
(30, 100, 15, 127, 15, 127), # 红色
(30, 100, -64, -8, 50, 70), # 绿色
(0, 40, 0, 90, -128, -20) # 蓝色
]
定义颜色识别的阈值,格式是 Lab 颜色空间下的 (L_min, L_max, A_min, A_max, B_min, B_max)
。
每个元组代表一个颜色范围,find_blobs()
会用来提取图像中满足这个范围的区域(blob)。
摄像头初始化
sensor = Sensor(width=DETECT_WIDTH, height=DETECT_HEIGHT)
sensor.reset()
sensor.set_framesize(width=DETECT_WIDTH, height=DETECT_HEIGHT)
sensor.set_pixformat(Sensor.RGB565)
- 实例化摄像头对象,指定输出分辨率;
reset()
:重置摄像头,加载默认配置;set_framesize()
:设置输出图像分辨率;set_pixformat()
:设置输出格式为 RGB565(适合显示和处理)。
显示设备初始化
Display.init(Display.ST7701, to_ide=True)
初始化 LCD 显示屏(使用 ST7701 驱动),同时也输出到 IDE 缓冲区,方便调试。
MediaManager.init()
初始化媒体资源管理器,处理图像缓存、内存池等底层资源。
启动图像采集
sensor.run()
获取当前图像帧
img = sensor.snapshot()