OpenMV测距

测距

OpenMV采用的是单目摄像头,想要实现测距,就需要选参照物,利用参照物的大小比例来计算距离。

本节分享一下第二种方法,如何通过摄像头里乒乓球的大小,计算摄像头与乒乓球之间的距离。
众所周知,乒乓球距离摄像头越远,摄像头里乒乓球的大小就越小,那么问题来了?
这个关系到底是什么呢?
(注:此处的数学几何问题,仅涉及到高中数学三角函数部分,不想看的,直接看结论也可)
为了简化问题,我们看一下图:
在这里插入图片描述

由左边的摄像头里的几何关系可得知:
在这里插入图片描述

所以有(1式)
在这里插入图片描述

由右边的真实环境里的几何关系得知:
在这里插入图片描述

带入(1式),可得(结论公式):
在这里插入图片描述

上面就是最终我们想知道的关系啦!
这是什么意思呢?
等号左边的Lm是长度,Bpix是摄像头中,球所占的像素(直径的像素)。等号右边呢,Rm是球真实的半径,Apix是是固定的像素,a是视角的一半。
所以!所以!所以!所以!所以!所以!所以!
这个公式告诉我们的就是:
实际长度和摄像头里的像素成反比
简化就是
距离 = 一个常数/直径的像素
好啦,我们已经知道关系啦,而且还是这么的优雅简单!
具体操作步骤呢,就是先测出这个常数的值,怎么测不用说了吧,就是先让球距离摄像头10cm,打印出摄像头里直径的像素值,然后相乘,就得到了k的值!
然后 距离=这个常数/摄像头里像素点,so easy.
我这里贴出OpenMV的代码:
#Measure the distance
#
#This example shows off how to measure the distance through the size in imgage
#This example in particular looks for yellow pingpong ball.

import sensor, image, time

#For color tracking to work really well you should ideally be in a very, very,
#very, controlled enviroment where the lighting is constant…

yellow_threshold = ( 56, 83, 5, 57, 63, 80)
#You may need to tweak the above settings for tracking green things…
#Select an area in the Framebuffer to copy the color settings.

sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # use RGB565.
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.
K=5
000#the value should be measured

while(True):
clock.tick() # Track elapsed milliseconds between snapshots().
img = sensor.snapshot() # Take a picture and return the image.

blobs = img.find_blobs([yellow_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)

#print(clock.fps()) # Note: Your OpenMV Cam runs about half as fast while
# connected to your computer. The FPS should increase once disconnected.

成果是这样的,通过串口把距离打印出来。

  • 10
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值