OpenMV嵌入式图像处理 笔记

来源:互联网 发布:saas平台多租户 mysql 编辑:程序博客网 时间:2024/05/24 06:48

OpenMV简介以及基本中文教程请参见目前官网给出OpenMV中国的三家代理商,英文教程请参见官网以及官方论坛。此笔记是由于中文代理商不够全面的基础上,整合官网教程,自己可以最大程度的了解这个小巧易用的摄像头模块,也方便大家参考,*不保证正确,您所使用的代码,对您的openmv造成任何损害,我概不负责,慎用!*


>0x01<—>MicroPython库<


以下标准Python库内置于MicroPython中。对于其他库,请从micropython-lib存储库下载。Python标准库和微型库,以下标准Python库已经被“微观化”以适应MicroPython的理念。它们提供该模块的核心功能,旨在成为标准Python库的替代品。这些模块可以通过他们的 u-name引用,也可以通过它们的 non-u-name来获得。 non-u-name该名称的文件应在你的package路径中。例如,import json 将首先搜索 json.py 文件或 json 目录,如果找到它就可加载该包。如果没有找到任何内容,它将回退加载内置ujson模块。
官网给出的几个模块,引用方法同Python的基本语法一样,先 import,再 name.function()

  • gc - 控制垃圾收集器
  • math - 数学函数库
  • select - 等待一组流上的事件
  • sys - 系统特定功能
  • ubinascii - 二进制/ ASCII转换
  • uhashlib - 哈希算法
  • uio - 输入/输出流
  • ujson - JSON编码和解码
  • uos - 基本的“操作系统”服务
  • ure - 正则表达式
  • usocket - 提供对BSD的访问。
  • ustruct - 打包和解包原始数据类型
  • utime - 时间相关功能
  • uzlib - zlib解压缩

举个栗子

import  mathdef degrees(radians):   #弧度制和角度制的转换计算    return (180 * radians) / math.pi

对于OpenMV,开发者,封装了专门的库,用于使用者调用,简单方便。

pyb     # 与电路板相关的功能(板级功能)        #时间相关功能 (部分可以与time类替换)        #复位相关功能        #中断相关功能        #电源相关功能        #其他功能        #类(class)########其他类#########ADC     #- 模数转换        #构造函数(Constructors)        #方法(Methods)DAC     #- 数模转换        #构造函数        #方法CAN     #总线控制器局域网通信总线        #构造函数        #类方法(Class Methods)        #方法        #常量(Constants)ExtInt  #- 配置I / O引脚以在外部事件中中断        #构造函数        #类方法        #方法        #常量I2C     # - 一个双线串行协议        #构造函数        #方法        #常量LED     #LED,板子上已经内置了几个led        #构造函数        #方法I / O   #引脚        #构造函数        #类方法        #方法        #常量servo   #- 3线伺服驱动器        构造函数        方法SPI类    #- 主驱动串行协议        #构造函数        #方法        #常量Timer  #- 控制内部定时器        #构造函数        #方法TimerChannel    #- 为定时器设置通道                #方法UART    #- 双工串行通信总线        #构造函数        #方法        #常量        #流量控制USB_VCP #- USB虚拟通信端口        #构造函数        #方法time    #- 追踪经过时间        #功能        #构造函数        #方法sensor  #- 摄像头传感器        #功能        #常量image   #- 机器视觉        #功能HaarCascade     #- 特征描述符                #构造函数Histogram       #- 直方图对象                #方法Percentile      #百分位数对象方法Statistics      #- 统计对象                #方法Blob            #- Blob对象                #方法Line            #- Line对象Circle          #- Circle对象                #方法Rect            #- Rectangle Object                #方法QRCode          #- QRCode对象,扫码                #方法AprilTag        #- AprilTag对象,3D识别***标签***                #方法DataMatrix      #- DataMatrix对象                #方法BarCode         #- BarCode对象                #方法kptmatch        #- 关键点对象                #方法ImageWriter     #- ImageWriter对象                #构造函数                #方法ImageReader     # - ImageReader对象                #构造函数                #方法Image           #- 图像对象                #构造函数                #方法                #常量gif             #- gif录音Gif             #Gif录音机                #构造函数                #方法mjpeg           #- mjpeg录音Mjpeg           #- Mjpeg录音机                #构造函数                #方法lcd             #- lcd屏蔽驱动程序,配套官方屏幕                #功能fir             #- 热电屏蔽驱动器(fir ==远红外线)                #功能cpufreq         #- 简单的cpu频率控制                #功能                #常量machine         #- 与电路板相关的功能                #复位相关功能                #中断相关功能                #电源相关功能                #杂项功能                #类I2C             #- 一个双线串行协议                构造函数                一般方法                原始I2C操作                标准 bus 操作                内存操作

代码实例

import sensor, image, time,pybfrom pyb import UARTfrom pyb import Pingreen_threshold=(45,75,-40,-10,4,30)blue_threshold   = ( 30 ,45,0,30,-62,-39)ROI=(77,8,221,216)#设置检测区域(兴趣范围)sensor.reset() # Initialize the camera sensor.sensor.set_pixformat(sensor.RGB565) # use RGB565.sensor.set_framesize(sensor.QVGA) # use QQVGA for speed.sensor.set_brightness(-1)#亮度sensor.skip_frames(10) # Let new settings take affect.sensor.set_auto_gain(False) # must be turned off for color trackingsensor.set_auto_whitebal(False) # must be turned off for color tracking#关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。clock = time.clock() # Tracks FPS.single_out =  Pin('P0', Pin.OUT_PP)#IO操作,注意对应OpenMV引脚single_out.low()# P4->TX ,P5->RXuart = UART(3, 115200)#先实例化一个19200波特率的串口3,pyb.delay(1000)#板级毫秒延时,也可以time.ticks()替换,send_data_2=[0xf1,0,0,0,0,0,0,0,0,0xf2]while(True):    clock.tick() # Track elapsed milliseconds between snapshots().    send_data=[]    send_data.append(0xf0)    img = sensor.snapshot() # Take a picture and return the image.    green_blobs = img.find_blobs([green_threshold],roi=ROI)    sum_bai=len(green_blobs)    #print("bai%d:"%sum_bai)#调试用    if sum_bai>=1:    #如果找到了目标颜色        for b in green_blobs[0:1]:#只取一个        #迭代找到的目标颜色区域            # Draw a rect around the blob.            img.draw_rectangle(b[0:4],color=(255,255,255)) # rect            #用白色矩形标记出目标颜色区域            img.draw_cross(b[5], b[6]) # cx, cy            #发打送包(8bit/位),精度保留            send_data.append(b[5]//256)            send_data.append(b[5]%256)            send_data.append(b[6]//256)            send_data.append(b[6]%256)            #在目标颜色区域的中心画十字形标记    if sum_bai==0:#保证数据包一样长        send_data.append(send_data_2[1])        send_data.append(send_data_2[2])        send_data.append(send_data_2[3])        send_data.append(send_data_2[4])    #蓝色识别追踪    blue_blobs = img.find_blobs([blue_threshold],roi=ROI)    sum_blue=len(blue_blobs)    if blue_blobs:        #如果找到了目标颜色        for b in blue_blobs:            #迭代找到的目标颜色区域                # Draw a rect around the blob.                img.draw_rectangle(b[0:4],color=(0,0,0)) # rect                #用白色矩形标记出目标颜色区域                img.draw_cross(b[5], b[6]) # cx, cy                #在目标颜色区域的中心画十字形标记                send_data.append(b[5]//256)                send_data.append(b[5]%256)                send_data.append(b[6]//256)                send_data.append(b[6]%256)                break                #在目标颜色区域的中心画十字形标记    if sum_blue==0:            send_data.append(send_data_2[5])            send_data.append(send_data_2[6])            send_data.append(send_data_2[7])            send_data.append(send_data_2[8])    img.draw_rectangle(ROI)    print(clock.fps()) # 帧率值,Note: Your OpenMV Cam runs about half as fast while    # connected to your computer. The FPS should increase once disconnected.    print("white: %d blue: %d"%(sum_bai,sum_blue))    send_data.append(0xf1)#帧尾    #自定义数据帧完毕,拉高P0为高电平,出发单片机外部IO中断接收数据包    single_out.high()    pyb.delay(5)    for i in send_data:        uart.writechar(i)    print(send_data)#调试用    send_data_2=send_data#更新包,目标出现短暂检测不出使用上一个位置的值    pyb.delay(1)#延迟再拉低P0,发送完毕,在示波器下可看出P0为高电平时,有UART3的发送引脚有电平变化即数据发送    single_out.low()
原创粉丝点击