使用Calibrated Camera opencv c ++测量物体的实际尺寸?

时间:2018-05-30 04:21:29

标签: c++ opencv

我正在完成与opencv相关的论文。 我想用单个相机测量物体的实际尺寸(mm)但我有问题转换相机的自然单位(像素)和现实世界单位 !!! 校准相机后,我有:

  1. 相机矩阵(3x3)
  2. 失真系数
  3. 外部参数[旋转矢量(1x3)+平移矢量(1x3)]
  4. 我已阅读以下链接,但我无法找到转换单位的公式。 https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

    关于对象的度量大小的示例 enter image description here

    任何建议??? 非常感谢。

1 个答案:

答案 0 :(得分:0)

如评论中所述,您需要到物体的距离才能从像素中获取3D坐标。可能的工作流程是:

  1. 使用失真参数校正图像,即校正由相机引起的失真。
  2. 使用相机矩阵将像素投影到相机坐标系中的3D点。为此,您可以将3x3相机矩阵的倒数与包含像素[pixel_x, pixel_y, 1]^T的矢量相乘。如果将结果[x', y', 1]^T乘以深度,即z分量,则在摄像机坐标系中获得3D点。
  3. 使用extrinsics参数将点从相机坐标系转换为世界坐标系。
  4. 无法单独从图像中获取深度值。唯一的选择是使用一些额外的信息。也许你的物体放在桌子上,你知道相机和桌子之间的距离。

    要测量相机与桌子甚至物体本身之间的距离,您可以使用Aruco标记,这些标记也可以在openCV中使用。