程序展示
# 色块监测 例子
#
# 这个例子展示了如何通过find_blobs()函数来查找图像中的色块
# 这个例子查找的颜色是深红色
import sensor, image, time
# 颜色追踪的例子,一定要控制环境的光,保持光线是稳定的。
red_threshold =(0, 46, 25, 111, -128, 90)
#设置红色的阈值,括号里面的数值分别是L A B 的最大值和最小值(minL, maxL, minA,
# maxA, minB, maxB),LAB的值在图像左侧三个坐标图中选取。如果是灰度图,则只需
#设置(min, max)两个数字即可。
sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QQVGA) # 使用 QQVGA 速度快一些
sensor.skip_frames(time = 2000) # 跳过2000s,使新设置生效,并自动调节白平衡
sensor.set_auto_gain(False) # 关闭自动自动增益。默认开启的,在颜色识别中,一定要关闭白平衡。
sensor.set_auto_whitebal(False)
#关闭白平衡。白平衡是默认开启的,在颜色识别中,一定要关闭白平衡。
clock = time.clock() # 追踪帧率
while(True):
clock.tick() # Track elapsed milliseconds between snapshots().
img = sensor.snapshot() # 从感光芯片获得一张图像
blobs = img.find_blobs([red_threshold])
MIN_BLOB_AREA = 220 # 最小色块面积阈值
if blobs:
for b in blobs:
if b.pixels() > MIN_BLOB_AREA:
img.draw_rectangle(b[0:4]) # rect
img.draw_cross(b[5], b[6]) # cx, cy
print(clock.fps()) # 注意: 你的OpenMV连到电脑后帧率大概为原来的一半
#如果断开电脑,帧率会增加
代码细节讲解
一、色块的识别
通过调节颜色阈值,来让画面将你需要的颜色调成亮白,其他的地方处理成黑色即可。
1、阈值
2、原图
3、有噪声的阈值
4、调整好后 (选中的红色为目标)
我们发现他们的阈值是不一样的,我们选择更适合我们的第二个阈值,将他放在我们的程序里面。
# 颜色追踪的例子,一定要控制环境的光,保持光线是稳定的。
red_threshold =(0, 46, 25, 111, -128, 90)
#设置红色的阈值,括号里面的数值分别是L A B 的最大值和最小值(minL, maxL, minA,
# maxA, minB, maxB),LAB的值在图像左侧三个坐标图中选取。如果是灰度图,则只需
#设置(min, max)两个数字即可。
二、去除噪声
我们会发现要是不去除噪音时,当图像中出现多个小红色时,会框选出多个小红框,可是我们就只需要中间的主要红色,为了去除噪音,我们可以加入
MIN_BLOB_AREA = 220 # 最小色块面积阈值
if blobs:
for b in blobs:
if b.pixels() > MIN_BLOB_AREA:
img.draw_rectangle(b[0:4]) # rect
img.draw_cross(b[5], b[6]) # cx, cy
使用pixels()
方法来获取色块的像素点数量,并将其作为面积的估计。在上面的代码中,我们使用了b.pixels()
来获取色块的像素点数量。然后,通过比较像素点数量和最小阈值MIN_BLOB_AREA
,来判断色块的大小是否符合要求。
效果对比
未加去噪
去噪
感谢
谢谢大家的阅读,希望和大家一起进步