OpenMV自动采集颜色阈值方法设置

方法一:定义函数,将收集到的lab颜色阈值放在同一个列表里

1.定义一个名为 collect_threshold 的函数,该函数用于收集一系列颜色阈值。以下是代码的详细分析:

def collect_threshold(num_iterations):

定义了一个名为 collect_threshold 的函数,它接受一个参数 num_iterations,表示要采集的阈值的次数。
2. 初始化阈值列表:

apple_thresholds = []

初始化一个空列表 apple_thresholds,用于存储每次迭代中收集的阈值。
3. 循环采集:

for i in range(num_iterations):

使用循环进行 num_iterations 次迭代,每次迭代中执行以下操作:
4. 开启和关闭LED指示灯:

LED_Collect.on()              #采集指示灯
time.sleep_ms(100)
LED_Collect.off()
time.sleep_ms(100)

首先开启 LED_Collect(可能是一个用于指示正在采集的指示灯)。然后等待100毫秒。接着关闭指示灯,再等待100毫秒。这可能是为了给用户或系统一个明确的指示,表明正在进行数据采集。
5. 获取图像:

img = sensor.snapshot()

使用 sensor.snapshot() 获取一张图像的快照。
6. 绘制矩形:

img.draw_rectangle((160,160,120,120),color = (255,0,0),thickness = 2)

在图像上绘制一个矩形。矩形的位置和颜色已指定。
7. 获取矩形区域的统计信息:

Statistics = img.get_statistics(roi = (160,160,120,120))

使用 img.get_statistics() 方法获取矩形区域的统计信息。这里的 roi 参数指定了感兴趣的区域,即之前绘制的矩形区域。
8. 收集阈值:

thresholds = (Statistics.l_min(),Statistics.l_max(),
                      Statistics.a_min(),Statistics.a_max(),
                        Statistics.b_min(),Statistics.b_max())

从统计信息中提取最小和最大的亮度、饱和度和色调值,并将它们存储在 thresholds 变量中。这些阈值可以用于后续的颜色识别或分析。
9. 添加阈值到列表并打印:

apple_thresholds.append(thresholds)
print(apple_thresholds)

将当前迭代中收集的阈值添加到 apple_thresholds 列表中,并打印该列表。这有助于监视进程或调试。但请注意,这里有一个问题:每次迭代都打印整个列表可能不是最高效的方法,特别是当 num_iterations 很大时。更好的做法可能是仅在每个迭代结束时打印当前的阈值。
10. 返回阈值列表:

return apple_thresholds

函数返回收集的阈值列表。在调用此函数的代码中,你可以这样使用它:
11. 调用函数并打印结果:

apple_thresholds = collect_threshold(5)  # 例如,收集5次阈值的情况。你可以根据需要更改这个数字。

调用 collect_threshold 函数并传入一个数字(例如5),然后将其返回的阈值列表存储在 apple_thresholds 变量中。根据需要,可以进一步处理或分析这些阈值。

这种方法,可以统计出多个阈值,但是由于添加的阈值较多,单片机处理可能变慢发热。

完整函数代码如下:

def collect_threshold(num_iterations):
    apple_thresholds = []
    for i in range(num_iterations):
        LED_Collect.on()                #采集指示灯
        time.sleep_ms(100)
        LED_Collect.off()
        time.sleep_ms(100)
        img = sensor.snapshot()
        img.draw_rectangle((160,160,120,120),color = (255,0,0),thickness = 2)
        Statistics = img.get_statistics(roi = (160,160,120,120))
        thresholds = (Statistics.l_min(),Statistics.l_max(),
                      Statistics.a_min(),Statistics.a_max(),
                      Statistics.b_min(),Statistics.b_max())
        apple_thresholds.append(thresholds)
        print(apple_thresholds)
    return apple_thresholds

apple_thresholds = collect_threshold(5)

方法二:采用for循环将阈值采集列表刷新

此处参考B站大佬视频

主要目的是通过循环200次,采集图像,然后在图像上绘制一个矩形,并获取该矩形区域的统计信息。以下是代码的详细分析:

1.循环:

for i in range(200):

这是一个for循环,它将执行200次。这意味着整个循环体将被执行200次。
2. 获取图像:

img = sensor.snapshot()

使用sensor.snapshot()方法获取一张图像的快照,并将其存储在img变量中。
3. 绘制矩形:

img.draw_rectangle((160,160,120,120),color = (255,0,0),thickness = 2)

在img图像上绘制一个矩形。矩形的位置和颜色已指定。其中,位置为(160, 160, 120, 120),颜色为红色(RGB值为(255, 0, 0))。
4. 获取矩形区域的统计信息:

Statistics = img.get_statistics(roi = (160,160,120,120))

使用img.get_statistics()方法获取矩形区域的统计信息。这里的roi参数指定了感兴趣的区域,即之前绘制的矩形区域。
5. 收集阈值:

apple_thresholds = [(Statistics.l_min(),Statistics.l_max(),
                        Statistics.a_min(),Statistics.a_max(),
                        Statistics.b_min(),Statistics.b_max())]

从统计信息中提取最小和最大的亮度、饱和度和色调值,并将它们存储在apple_thresholds列表中。注意,每次迭代都会覆盖上一次的阈值列表,因此最终apple_thresholds将只包含最后一次迭代的阈值。为了收集所有的阈值,你可能希望将阈值添加到列表中,而不是每次都创建一个新的列表。
6. 打印阈值:

print(apple_thresholds)

打印apple_thresholds列表的内容。这将有助于监视或调试过程。但是,与上面相同的问题,每次迭代都打印整个列表可能不是最高效的方法,特别是当num_iterations很大时。更好的做法可能是仅在每个迭代结束时打印当前的阈值。

这种方法,实时显示采集的阈值列表。

完整函数代码如下:

for i in range(200):
     img = sensor.snapshot()
     img.draw_rectangle((160,160,120,120),color = (255,0,0),thickness = 2)
     Statistics = img.get_statistics(roi = (160,160,120,120))
     apple_thresholds = [(Statistics.l_min(),Statistics.l_max(),
                         Statistics.a_min(),Statistics.a_max(),
                         Statistics.b_min(),Statistics.b_max())]
     print(apple_thresholds)

  • 30
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长空有风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值