OpenMV 线性回归巡线之一:赛道提取

本文介绍了使用OpenMV进行线性回归赛道提取的方法,包括提高图像对比度、图像二值化、噪声消除等步骤。通过线性回归算法找到赛道,并详细解释了API接口的使用。此外,还提到了小车前的车灯减少环境光影响,以及WS2812灯条的驱动代码。最后,展示了如何根据线性回归结果计算赛道方向和角度。
摘要由CSDN通过智能技术生成

背景介绍:
通过 《图像处理基础》能知道视觉就是在图片上找目标。通过《OpenMV 图片对象(目标识别基础)》能知道怎么找目标。

本篇继续这个话题,说说找目标是为了做什么。

提取赛道

线性回归方法的优点是能在视场中的任何位置找到线,缺点是慢。巡线设置为“灰度”、“QQQVGA”来加快速度,由于不跟踪颜色,所以不需要闭自动白平衡。

使用 histeq() 方法提高图像的对比度,以便接下来将图像二值化分离出赛道。

下面用 OpenMV IDE 提取赛道的灰度阀值,如下:

因为 Sugar 从柜子里翻出的老赛道充满了褶皱,所以噪点特别多。下面用 mean(2) 方法消个噪,再看下效果:

现在看上去好多了,接下来把图像通过 binary() 方法二值化,提取出赛道,如下:

赛道有点细,可以通过 erode(1) 让赛道粗一点,如下:

找赛道

1、车灯

小车前放车灯减小环境光对图像的影响,灯选用 WS2812 灯条(8 个灯珠)。WS2812 的驱动代码如下:

# -*- coding: utf-8 -*-

import gc
import pyb

ON  = 255
OFF = 0

class WS2812:
    """
    Driver for WS2812 RGB LEDs. May be used for controlling single LED or chain
    of LEDs.

    Example of use:

        chain = WS2812(spi_bus=1, led_count=4)
        data = [
            (255, 0, 0),    # red
            (0, 255, 0),    # green
            (0, 0, 255),    # blue
            (85, 85, 85),   # white
        ]
        chain.show(data)

    Version: 1.0
    """
    buf_bytes = (0x88, 0x8e, 0xe8, 0xee)

    def __init__(self, spi_bus=1, led_count=1, intensity=1):
        """
        Params:
        * spi_bus = SPI bus ID (1 or 2)
        * led_count = count of LEDs
        * intensity = light intensity (float up to 1)
        """
        self.led_count = led_count
        self.intensity = intensity

        # prepare SPI data buffer (4 bytes for each color)
        self.buf_length = self.led_count * 3 * 4
        self.buf = bytearray(self.buf_length)

        # SPI init
        self.spi = pyb.SPI(spi_bus, pyb.SPI.MASTER, baudrate=3200000, polarity=0, phase=1)

        # turn LEDs off
        self.show([])

    def
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值