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

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

前言


  在上一篇视觉测量工件尺寸中发现在实际应用中存在些许测量不准的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)



相关文章
|
5月前
|
算法 计算机视觉
图像处理之调整亮度与对比度
图像处理之调整亮度与对比度
46 6
|
4月前
相机镜头选择和计算
相机镜头选择和计算
26 0
|
6月前
|
传感器 编解码 算法
LabVIEW计算相机图像传感器分辨率以及镜头焦距
LabVIEW计算相机图像传感器分辨率以及镜头焦距
54 0
|
传感器
使用校准相机测量平面物体
使用校准相机测量平面物体。
143 0
|
6月前
|
资源调度 算法
[Halcon&测量] 一维测量
[Halcon&测量] 一维测量
188 0
[Halcon&测量] 一维测量
|
6月前
|
算法
[Halcon&标定] 相机自标定
[Halcon&标定] 相机自标定
154 1
|
6月前
|
传感器 机器学习/深度学习 存储
使用激光雷达(LiDAR)和相机进行3D物体跟踪
使用激光雷达(LiDAR)和相机进行3D物体跟踪
|
6月前
[光源频闪] Basler相机光源频闪设置操作说明
[光源频闪] Basler相机光源频闪设置操作说明
262 0
|
6月前
Halcon&测量] 模糊测量
Halcon&测量] 模糊测量
130 0
|
算法 API 计算机视觉
智慧交通day03-车道线检测实现03:相机校正和图像校正的实现
标定的图片需要使用棋盘格数据在不同位置、不同角度、不同姿态下拍摄的图片,最少需要3张,当然多多益善,通常是10-20张。该项目中我们使用了20张图片
150 0