循迹识别小车:(四)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
循迹总程序:
资源链接:
总项目文件:
