无人机视觉 您所在的位置:网站首页 迹寻怎么使用 无人机视觉

无人机视觉

2024-07-12 05:14| 来源: 网络整理| 查看: 265

前言:基于spieed出品的MaixPy-Dock开发板(K210芯片)进行实践。编译运用MicroPython语言,其是基于 Python3 的语法做的一款解析器,包含了 Python3 的大多数基础语法,主要运行在性能和内存有限的嵌入式芯片上。

        计算机视觉为无人机的导航提供了不可估量的作用,本文实现无人机对基础图形、颜色的识别与视觉循迹功能(视觉算法部分  不包括串口通信)

import sensor, image, time, lcd sensor.reset() sensor.set_pixformat(sensor.RGB565) # 灰度更快 sensor.set_framesize(sensor.QQVGA) sensor.skip_frames(time = 2000) lcd.init() clock = time.clock() #----颜色参数选择----# color_a = (20, 52, -13, 70, 2, 65) #---------------------------------功能函数--------------------------------------# #----------圆形图像识别---------# def fcircle(): img = sensor.snapshot().lens_corr(1.8) img.laplacian(1, sharpen=True) #lcd.display(img) for c in img.find_circles(threshold = 5000, x_margin = 10, y_margin = 10, r_margin = 10,r_min = 1, r_max = 80, r_step = 2): a=img.draw_circle(c.x(), c.y(), c.r(), color = (0, 255, 0)) #lcd.display(a) print(c) #----------矩形图像识别---------# def frectangle(): img = sensor.snapshot().lens_corr(1.8) img.laplacian(1, sharpen=True) for r in img.find_rects(threshold = 10000): img.draw_rectangle(r.rect(), color = (255, 0, 0)) for p in r.corners(): img.draw_circle(p[0], p[1], 5, color = (0, 255, 0)) print(r) #----------特定颜色识别---------# def find_max_blob(blobs): maxsize = 0 for blob in blobs: if blob[2]*blob[3] > maxsize: mmax_blob = blob maxsize = blob[2]*blob[3] return mmax_blob def fcolors(color): img = sensor.snapshot() # 拍一张照片并返回图像。 blobs = img.find_blobs([color]) if blobs: b = find_max_blob(blobs) if b[2] > 15 and b[3] > 15: img.draw_rectangle(b[0:4]) img.draw_cross(b[5], b[6]) print(b[5], b[6]) else: print('No') else: print('NO') #-----------循迹----------# def tracing(colors): # 拍摄一张图片并按阈值二值化 img = sensor.snapshot() # 使用kpu加速的锐化进行边缘增强 #img.conv3(con_sharpen) # 对于图像进行kpu加速的高斯模糊,使图像中心化平滑 img.conv3(con_gauss) img = img.binary(line_color_union) # 对二值化的图片进行线性回归得到直线 line = img.get_regression([(100,100,0,0,0,0)], roi = (2,2,img.width()-4,img.height()-4)) img.draw_rectangle((2,2,img.width()-4,img.height()-4)) if line and line.magnitude() > 3: # 在图片上画线 img.draw_line(line.line(), color = 110, thickness = 5) # 计算横滚误差 erho = abs(line.rho())-img.width()/2 # 计算偏航误差 if line.theta() > 90: etheta = line.theta()-180 else: etheta = line.theta() # 误差归一化 res_erho = erho/(img.width()/2) res_etheta = etheta/90 # 误差输出 print('tt',int(res_erho*1000), int(res_etheta*1000)) else: # 定义误差只能小于1000,若输出无效值则寻迹无效 print('tt',1001, 1001) # 显示图片 lcd.display(img) #------------------------------------主函数-------------------------------------# while True: clock.tick() #fcircle() #frectangle() #fcolors(color_a) #tracing(color_a) print("FPS %f" % clock.fps())

###大家可根据自身需求对代码进行更改参数、恢复注释

参考资料:

MaixPy 文档简介 - Sipeed Wiki



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有