使用OpenMV进行颜色识别和物料识别

本博客文章将解析一段Python代码,该代码使用OpenMV平台实现颜色识别和物料识别。

if(WL_flag): # 识别物料
    WL_flag
    for blob in img.find_blobs([thresholds[0]],roi=[100,100,40,40], pixels_threshold=200, area_threshold=200, merge=True):
        # 此处没有设置roi的值,便是对整个图像进行颜色识别
        # 这些值取决于斑点不是圆形的——否则它们将是不稳定的。
        if blob.elongation() > 0.5:
            img.draw_edges(blob.min_corners(), color=(255,0,0))
            img.draw_line(blob.major_axis_line(), color=(0,255,0))
            img.draw_line(blob.minor_axis_line(), color=(0,0,255))
        # These values are stable all the time.
        img.draw_rectangle(blob.rect()) # 如果识别到了颜色,我们就在这个色块的周围画一个框把它圈出来
        img.draw_cross(blob.cx(), blob.cy()) # 中间画一个十字,(blob.cx(), blob.cy())是色块的中心坐标
        img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20)
        # blob是find_blobs返回的参数
        print('1')
        uart.write('1\r\n')

    for blob in img.find_blobs([thresholds[1]],roi=[100,100,40,40], pixels_threshold=200, area_threshold=200, merge=True):
        # blob是find_blobs返回的参数
        # 此处没有设置roi的值,便是对整个图像进行颜色识别
        if blob.elongation() > 0.5:
            img.draw_edges(blob.min_corners(), color=(255,0,0))
            img.draw_line(blob.major_axis_line(), color=(0,255,0))
            img.draw_line(blob.minor_axis_line(), color=(0,0,255))
        # These values are stable all the time.
        img.draw_rectangle(blob.rect()) # 如果识别到了颜色,我们就在这个色块的周围画一个框把它圈出来
        img.draw_cross(blob.cx(), blob.cy()) # 中间画一个十字,(blob.cx(), blob.cy())是色块的中心坐标
        img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20)
        print('2')
        uart.write('2\r\n')

    for blob in img.find_blobs([thresholds[2]],roi=[100,100,40,40], pixels_threshold=200, area_threshold=200, merge=True):
        # 此处没有设置roi的值,便是对整个图像进行颜色识别
        # These values depend on the blob not being circular - otherwise they will be shaky.
        if blob.elongation() > 0.5:
            img.draw_edges(blob.min_corners(), color=(255,0,0))
            img.draw_line(blob.major_axis_line(), color=(0,255,0))
            img.draw_line(blob.minor_axis_line(), color=(0,0,255))
        img.draw_rectangle(blob.rect()) # 如果识别到了颜色,我们就在这个色块的周围画一个框把它圈出来
        img.draw_cross(blob.cx(), blob.cy()) # 中间画一个十字,(blob.cx(), blob.cy())是色块的中心坐标
        img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20)
        # blob是find_blobs返回的参数
        print('3')
        uart.write('3\r\n')

代码解析:

  1. 条件语句: 代码首先检查 WL_flag 是否为真。 只有当 WL_flag 为真时,才会执行物料识别代码。

  2. 颜色识别: 代码使用 img.find_blobs 函数在图像中查找特定颜色的斑点。 thresholds 变量包含了用于识别不同颜色的阈值。

  3. 斑点处理: 对于每个找到的斑点,代码会执行以下操作:

    • 形状分析: blob.elongation() 用于判断斑点的形状是否细长。
    • 绘制标记: 代码使用 img.draw_edges, img.draw_line, img.draw_rectangle, img.draw_crossimg.draw_keypoints 函数在图像上绘制斑点的边缘、主轴线、次轴线、矩形框、十字和关键点。
  4. 信息输出: 代码通过串口 (uart.write) 输出识别到的颜色信息 ('1', '2', '3')。

注意事项:

  • ROI: 代码中的 roi 参数用于设置感兴趣区域 (Region of Interest)。 通过设置 ROI,可以限制颜色识别在图像的特定区域内进行,提高效率。
  • 阈值: thresholds 变量包含了用于识别不同颜色的阈值。 需要根据实际情况调整这些阈值,以确保准确识别颜色。
  • 串口: 代码使用串口 (uart) 与外部设备进行通信。 需要确保 OpenMV 与外部设备之间的串口连接正常。

这段代码提供了一个基本的框架,可以使用 OpenMV 进行颜色识别和物料识别。 可以根据实际需求对代码进行修改和扩展,例如添加更多的颜色识别、实现更复杂的形状分析、以及与其他传感器和执行器进行集成。

使用OpenMV进行颜色识别和物料识别的Python代码解析

原文地址: https://www.cveoy.top/t/topic/bxom 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录