OpenMV颜色阈值设置

OpenMV提供了两者阈值设置方案。分别是阈值编译器和直方图的方式选择阈值。

阈值编译器:优点,所寻找到的目标颜色更加合理,其他相似颜色区域的干扰比较小。缺点,调节LAB的最大最小值比较花费时间。

直立方图恰好相反,他很容易找到LAB的最大最小值的大体区间,但是容易收到相似颜色区域的干扰。所以,建议两者配合使用,先用直立方图找到LAB的最大最小值的大体区间,再利用阈值编译器对LAB的最大最小值进行微调。

首先我们使用直立方图:

打开OpenMV IDE软件——>右下角有一个直立方图——>颜色识别中,只需要用到LAB色彩空间。

OpenMV颜色阈值设置_第1张图片

我们要选择绿茶作为目标对象,只需要在帧缓冲区,拖动鼠标左键即可。根据直方图可知,我们的L最大值选择75,最小值为30。A最大值为0,最小值为-70。B的最大值为70,最小值为-10。(注:这个只需要包含绝大部分就行)

OpenMV颜色阈值设置_第2张图片

之后进行阈值编译器设置: 

左上方工具——>机器视觉——>阈值编译器——>帧缓冲区。可对要判断图像的LAB值进行调整。注意:这个时候OpenMV会截取当前的图片作为LAB值调整。所以我们采用阈值编译器的时候,需要提前将目标识别单位放在OpenMV摄像头之前。再进行如上操作

OpenMV颜色阈值设置_第3张图片

OpenMV颜色阈值设置_第4张图片

根据直立方图的值,我们调整LAB最大和最小值,尽可能的让要目标识别对象变成全白色。(注:即使没有全部变成白色也不影响,反正最后会把所有没有被滤除的白色区域变成一个大框)然后复制下方的LAB阈值。OpenMV颜色阈值设置_第5张图片

将复制的LAB阈值放到thresholds中。注意:我们看到thresholds有多个值,其实是因为我们在for语句中是使用的[thresholds[threshold_index]],而threshold_index为0,也就是说,先择我们在识别红色。因为我们的threshold_index=0,所以我们复制的阈值要求放在thresholds第一个位置(# generic_red_thresholds前)。如果threshold_index=1,我们复制的阈值要求放在thresholds第二个位置(# generic_green_thresholds前)。threshold_index=2,同理放在第三个位置。

threshold_index = 0 # 0 for red, 1 for green, 2 for blue
thresholds = [(30, 100, 15, 127, 15, 127), # generic_red_thresholds
              (30, 100, -64, -8, -32, 32), # generic_green_thresholds
              (0, 30, 0, 64, -128, 0)] # generic_blue_thresholds

.....(中间的代码省略)

for blob in img.find_blobs([thresholds[threshold_index]], pixels_threshold=200, area_threshold=200, merge=True):

但是OpenMV的官方教程我们能看到他的代码是这样的,其实是一样的。只不过这里的LAB阈值不需要注意这么多。直接更改green_threshold后面的值即可。

green_threshold   = (   0,   80,  -70,   -10,   -0,   30)

.....(中间的代码省略)

blobs = img.find_blobs([green_threshold])

你可能感兴趣的:(#,OpenMV,计算机视觉,人工智能)