利用相机焦距进行物体尺寸测量

简介: 利用相机焦距进行物体尺寸测量

前言


  在上一篇视觉测量工件尺寸中发现在实际应用中存在些许测量不准的BUG,在此特向大家致歉!


  在本篇中提出一种利用相机焦距和相机距离目标的距离进行物体尺寸测量,这里我借鉴了下《视频检测+定位+测距+控制鼠标移动》中测量距离的方法进行调整这个里面的公式原理:


X轴方向: 物体的实体尺寸 = 相机距离物体的距离/焦距 * 图像像素  

Y轴方向: 物体的实体尺寸 = 相机距离物体的距离/焦距 * 图像像素  



实践


  例如我们筹备标定板进行标定,这里标定的过程可以参考初探单目相机测距——相机标定,我们使用图像进行标定,这里需要注意的事项是:标定图像的尺寸需要同后期使用测量物体尺寸时拍摄的尺寸保持一致。

        image.png

image.png

  这里我们通过标定过程可以得到相机的两个焦距的值以及目标距离相机的距离分别为:


FX, FY, D =      ,   3.2757(米)


  经过测量,可以得到标定板距离相机的距离,在后面中我们测量物体的尺寸应当选择厚度较小的,或者使用投影的方式,这样可以最大限度降低误差。

image.png

image.png

image.png



代码


  这里我们可以得到图像的像素尺寸,使用方法为点击线段的两个端点即可获取两端点的图像坐标,进一步可以计算出自己的K值。


image.png

import cv2
img = cv2.imread('test.jpg')
def mouse_click(event, x, y, flags, para):
    if event == cv2.EVENT_LBUTTONDOWN:  # 左边鼠标点击
        print('PIX:', x, y)
if __name__ == '__main__':
    cv2.namedWindow("img")
    cv2.setMouseCallback("img", mouse_click)
    while True:
        cv2.imshow('img', img)
        if cv2.waitKey() == ord('q'):
            break
    cv2.destroyAllWindows()
复制代码


根据这个由勾股定理带入计算可以得到工件尺寸


import math
FX, FY = 16101.6621878712, 16105.9886831900  # 相机的焦距
D = 3.2757  # 物体距离相机的理论距离单位米
# 测量工件的两端坐标
x1, y1 = (2333, 1652)
x2, y2 = (3060, 1610)
# 计算物体分别在XY轴上的像素长度 
x = abs(x2 -x1)
y = abs(y2 - y1)
# 计算物体在XY轴上的实际长度 (得到值的单位是米)
DX = (x * D) / FX
Dy = (y * D) / FY
DL = math.sqrt(DX*DX + Dy*Dy)  # 勾股定理计算尺寸
print("物体的实际尺寸", DL)



目录
打赏
0
0
0
2
181
分享
相关文章
航摄比例尺、成图比例尺、地面分辨率与航摄设计用图比例尺
航摄比例尺、成图比例尺、地面分辨率与航摄设计用图比例尺
519 0
|
9月前
相机镜头选择和计算
相机镜头选择和计算
56 0
|
10月前
|
扭曲图像 鼻子拉伸
【6月更文挑战第28天】
51 0
LabVIEW使用正交编码器进行角位置测量
LabVIEW使用正交编码器进行角位置测量
130 1
使用校准相机测量平面物体
使用校准相机测量平面物体。
212 0
使用纹理滤波器对图像进行纹理分割
说明如何根据纹理识别和分割区域。
114 0
处理RGB-D图像数据以构建室内环境地图并估计相机的轨迹
视觉同步定位和映射 (vSLAM) 是指计算摄像机相对于周围环境的位置和方向,同时映射环境的过程。 您可以使用单眼摄像头执行 vSLAM。但是,深度无法准确计算,估计的轨迹未知,并且随着时间的推移而漂移。要生成无法从第一帧开始三角测量的初始地图,必须使用单眼相机的多个视图。更好、更可靠的解决方案是使用 RGB-D 相机,它由一个 RGB 彩色图像和一个深度图像组成。
260 0
Unity 之 获取物体的旋转角正确数值
不管父物体如何设置,都能获取到物体本身旋转角度的正确数值
1107 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等