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()
阅读全文
1 0
- OpenMV嵌入式图像处理 笔记
- OpenMV图像处理 最大类间方差法的实现
- 嵌入式 Bayer图像处理
- OpenCL嵌入式图像处理
- 嵌入式图像处理算法优化
- 图像处理笔记--图像增强
- 图像处理笔记之一
- 图像处理学习笔记
- 项目笔记--图像处理
- 图像处理笔记
- openCV图像处理笔记
- Matlab图像处理笔记
- matlab图像处理 笔记
- 图像处理笔记-day1
- 图像处理笔记
- [图像处理] 实验笔记
- JavaScript笔记之处理图像
- 图像处理笔记(1)
- 云原生:云计算时代命题之终极解决方案
- nodejs路由--get和post请求
- Java集合及concurrent并发包总结
- [Leetcode] 32. Longest Valid Parentheses
- 大数据Spark企业级实战版【学习笔记】----Spark R& MLBase
- OpenMV嵌入式图像处理 笔记
- 模版 取得一个数组中最大元素的下标
- SSM框架Mybatis之Mapper代理开发
- cocos2d-x CCScrollView 源码分析
- MySQL_整型、字符、浮点、时间类型
- Android学习参考推荐权威门户网站
- 数组随机取值,随机红包,冒泡排序
- Linux功耗管理(21)_Linux cpuidle framework(4)_menu governor
- C语言之生产者与消费者模型