一、引入库函数
格式:import +函数库名称,或者from +函数库+import+特定函数,后者可以精确地从模块中选择性地导入需要的对象,而不是导入整个模块。
from machine import Pin
import sensor, image, time
需要强调一下基础的函数库
sensor | 感光元件模块 |
image | 图像处理相关模块 |
time | 时钟 |
二、初始化
#摄像头初始化
sensor.reset() # 初始化感光元件
sensor.set_pixformat(sensor.RGB565) # 设置像素模式(这里是彩色)
sensor.set_framesize(sensor.QQVGA) # 设置图像大小 (320x240)
#sensor.set_windowing((160, 160)) #设置窗口
sensor.set_auto_gain(False)
#自动增益开启(True)或者关闭(False)。在使用颜色追踪时,需要关闭自动增益。
sensor.set_auto_whitebal(False)
#自动白平衡开启(True)或者关闭(False)。在使用颜色追踪时,需要关闭自动白平衡。
sensor.set_auto_exposure(False)
#enable 打开(True)或关闭(False)自动曝光。默认打开。
#如果 enable 为False, 则可以用 exposure_us 设置一个固定的曝光时间(以微秒为单位)。
sensor.skip_frames(time = 3000) # Wait for settings take effect.
#水平方向翻转
sensor.set_hmirror(True)
#垂直方向翻转
sensor.set_vflip(True)
上面是关于感光元件的初始化
详情可参考感光元件 · OpenMV中文入门教程
三、进行相关的操作
1、测距
import sensor, image, time
yellow_threshold = (56, 83, 5, 57, 63, 80)
sensor.reset() # 初始化相机传感器。
sensor.set_pixformat(sensor.RGB565) # 使用RGB565色彩格式。
sensor.set_framesize(sensor.QQVGA) # 使用QQVGA分辨率以提高速度。
sensor.skip_frames(10) # 跳过一些帧以使新的设置生效。
sensor.set_auto_whitebal(False) # 关闭自动白平衡。
clock = time.clock() # 用于跟踪帧率。
K = 5000 # 用于测量的常量值,具体值需要根据实际测量确定。
while True:
clock.tick() # 记录快照之间经过的毫秒数。
img = sensor.snapshot() # 拍摄一张照片并返回图像对象。
blobs = img.find_blobs([yellow_threshold]) # 查找符合黄色阈值的物体区域。
if len(blobs) == 1:
# 绘制一个矩形框出找到的物体。
b = blobs[0]
img.draw_rectangle(b[0:4]) # 在物体周围绘制矩形框
img.draw_cross(b[5], b[6]) # 在物体中心位置绘制交叉标记
Lm = (b[2] + b[3]) / 2 # 计算物体宽度和高度的平均值
length = K / Lm # 使用预定义的常量K计算距离
print(length) # 打印计算得到的距离值
其中k值测量方法:就是先让球距离摄像头10cm(可变),打印出摄像头里直径的像素值,然后相乘,就得到了k的值!
这里的b表示一个色块的属性。
- blob[0]相当于blob.x() 返回色块的外框的x坐标(int)。
- blob[1]相当于blob.y() 返回色块的外框的y坐标(int)。
- blob[2]相当于blob.w() 返回色块的外框的宽度w(int)。
- blob[3]相当于blob.h() 返回色块的外框的高度h(int)。
- blob[5]相当于blob.cx() 返回色块的外框的中心x坐标(int)。
- blob[6]相当于blob.cy() 返回色块的外框的中心y坐标(int)。