第一次打电赛,也没什么经验。队友的板子还没弄好,我写完没法调试。
背景为21年送药小车。本文没有经过实际调试,慎用。
直接上代码!
import sensor, image, time, math
from pyb import LED
from machine import UART
sensor.reset()
#sensor.set_hmirror(True)
#sensor.set_vflip(True)
sensor.set_auto_gain(False) # 关闭自动自动增益。默认开启的,在颜色识别中,一定要关闭白平衡。
sensor.set_auto_whitebal(False)
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(time = 2000)
clock = time.clock()
#补光
#LED(1).on() # 红灯
#LED(2).on() # 绿灯
#LED(3).on() # 蓝灯 三个一起开就是白灯
# 获取目标色块阈值
roi1 = (130, 70, 100, 100)
# 将图像分割成5块区域,分别计算线的中心坐标再求平均
#test_roi6 = (0, 120, 360, 24)
#test_roi7 = (0, 144, 360, 24)
#test_roi8 = (0, 168, 360, 24)
#test_roi9 = (0, 192, 360, 24)
#test_roi10 = (0, 216, 360, 24)
# —————————————————————————————————————————————————————————————————————————————————————————
# 通过串口打印
uart = UART(3, 115200)
def send_data(data1):
global uart
data1 = str(data1)
data = bytearray("[", data1, "]")
uart.write(data)
# —————————————————————————————————————————————————————————————————————————————————————————
# 查找最大色块
def find_max_blobs(blobs):
max_size = 0
max_blob = None
for blob in blobs:
if blob.pixels() > max_size:
max_blob = blob
max_size = blob.pixels()
return max_blob
# 寻找直线
line_threshold = [(32, 81, -7, 80, -5, 66)]
def find_blobs_to_line(myroi, line_threshold, max_width=50):
blobs = img.find_blobs(line_threshold, roi=myroi, area_threshold=50, pixel_threshold=50)
if blobs and len(blobs) == 1:
return blobs[0].cx(), blobs[0].cy()
else:
max_blob = find_max_blobs(blobs)
if max_blob is not None and max_blob.w() < max_width:
return max_blob.cx(), max_blob.cy()
return None
# 查找数字
num_roi = (0, 48, 160, 40)
def find_num(num_roi, num_threshold, max_width=80):
blobs = img.find_blobs(num_threshold, roi=num_roi, area_threshold=50, pixel_threshold=50)
if blobs:
max_bl