循迹识别小车:(四)OpenMV4部分

要完成功能

主要完成循迹部分图像数据采集: 1、寻线:OpenMV4摄像头将获得的轨迹进行处理,得到轨迹的一个偏离角度,然后通过偏转角判断给STM32发送左转或右转的信号。 2、停止:MV4通过模板匹配和识别圆双重判断是否目标为圆,如果是则给STM32发出信号来停止小车运动并开始树莓派识别。

1、寻线部分:

通过获得摄像头中线条进行几个块区域的数学运算,计算出轨迹偏离角度。 例程:

2、串口通信:

import time
from pyb import UART

uart = UART(3, 19200)

while(True):
    uart.write("Hello World!
")
    time.sleep_ms(1000)

先实例化一个19200波特率的串口3,然后调用write方法就可以了。 注意:必须是串口3,因为OpenMV2只引出了这个串口,pyb的串口有好多个的。OpenMV3又增加了串口1。

3、停止部分:

模板匹配:

颜色识别:

程序:

#-------(1)识别圆形部分--------------

        for c in img.find_circles(threshold = 3500, x_margin = 10, y_margin = 10, r_margin = 10,r_min = 2, r_max = 100, r_step = 2): # 如果发现圆
            img.draw_circle(c.x(), c.y(), c.r(), color = (0, 255, 0)) # 框出圆
            Discern_look_circle = 1
            # print(c) # 打印出{"x":.., "y":.., "r":.., "magnitude":..} magnitude是检测圆的强度。越高越好
        # print("FPS %f" % clock.fps())

#-------(2)模板匹配部分--------------

        for t in templates1:  #如果与模板匹配
            template = image.Image(t) #template获取图片
            r = img.find_template(template, 0.70, step=4, search=SEARCH_EX) #进行相关设置,可以设置roi缩小区域
            if r: #如果有目标
                img.draw_rectangle(r) #画矩形,框出匹配的目标
                Discern_template_circle = 1
                # print("圆形")

        Discern = Discern_look_circle + Discern_template_circle

循迹总程序:

资源链接:

总项目文件:

经验分享 程序员 微信小程序 职场和发展