OpenMV嵌入式图像处理 笔记

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  math

def 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,pyb
from pyb import UART
from pyb import Pin

green_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 tracking
sensor.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->RX
uart = 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()
  • 13
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值