1.16. openmv摄像头测距¶
1.16.1. 模块介绍¶
OpenMV摄像头是一款小巧,低功耗,低成本的电路板,它帮助你很轻松的完成机器视觉(machine vision)应用。 你可以通过高级语言Python脚本(准确的说是 MicroPython ),而不是C/C++。Python的高级数据结构使你很容易在机器视觉算法中处理复杂的输出。 但是,你仍然可以完全控制OpenMV,包括IO引脚。你可以很容易的使用外部终端触发拍摄或者或者执行算法,也可以把算法的结果用来控制IO引脚。
1.16.2. 原理介绍¶
公式:Lm*Bpic=Rm*Apix/tan(a) Lm是长度,Bpix是摄像头中,球所占的像素(直径的像素)。等号右边呢,Rm是球真实的半径,Apix是是固定的像素,a是视角的一半。 所以这个公式告诉我们的就是: 实际长度和摄像头里的像素成反比 简化就是 距离 = 一个常数/直径的像素
1.16.3. 编程学习¶
- 读取openmv画面信息,计算出目标物体与摄像头距离,代码如下:
import sensor, image, time blue_threshold = (0, 77, 0, -27, -128, 0)#设置目标颜色的LAB色彩空间参数 sensor.reset() # 初始化摄像头 sensor.set_pixformat(sensor.RGB565) #格式为 RGB565 sensor.set_framesize(sensor.QQVGA) #使用 QQVGA 速度快一些 sensor.skip_frames(10) # 跳过10s,使新设置生效 sensor.set_auto_whitebal(False) #关闭白平衡 clock = time.clock() # 追踪帧率 K=5000#设置参数 while(True): clock.tick() # Track elapsed milliseconds between snapshots(). img = sensor.snapshot() # Take a picture and return the image. blobs = img.find_blobs([blue_threshold])#颜色识别 if len(blobs) == 1: # Draw a rect around the blob. b = blobs[0] img.draw_rectangle(b[0:4]) # rect img.draw_cross(b[5], b[6]) # cx, cy Lm = (b[2]+b[3])/2#像素点大小 length = K/Lm print(length)#输出距离