繁体   English   中英

使用Calibrated Camera opencv c ++测量对象的实际大小?

[英]Measure real size of object with Calibrated Camera opencv c++?

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

  1. 相机矩阵(3x3)
  2. 失真系数
  3. 外在参数[旋转向量(1x3)+翻译向量(1x3)]

我已经阅读了以下链接,但是我找不到公式来转换单位。 https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

关于对象的度量大小的示例 在此处输入图片说明

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

如注释中所述,您需要到对象的距离才能从像素获取3D坐标。 可能的工作流程为:

  1. 使用失真参数校正图像,即校正由相机引起的失真。
  2. 使用相机矩阵将像素投影到相机坐标系中的3D点中。 为此,您可以将3x3摄像机矩阵的逆乘以包含像素[pixel_x, pixel_y, 1]^T的向量。 如果将结果[x', y', 1]^T与深度(即z分量)相乘,则会获得相机坐标系中的3D点。
  3. 使用外部参数将点从摄影机坐标系转换为世界坐标系。

仅从图像中获取深度值是不可能的。 唯一的选择是使用一些其他信息。 也许您的对象放在桌子上,并且您知道相机和桌子之间的距离。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM