1

我有一台相机,它对角地看向地平面。这架飞机已校准。在这个平面上有一个物体,可以在任何距离(在相机的视野内),但总是会朝着相机旋转..(而不是与侧面成一定角度..)

我想测量这个物体的高度。我可以检测到下边缘的位置,如果它接触到地平面。是否可以在定义的位置垂直于地平面“竖立一个测量平面”以便垂直测量?如果是,如何做到这一点?

在此处输入图像描述

编辑:

到目前为止,我想出了这个:

 newpose := Pose
 newpose[3] := newpose[3]-90
 gen_plane_object_model_3d (newpose, [-0.5,-0.5,0.5,0.5], [-0.5,0.5,0.5,-0.5], ObjectModel3D)
 disp_object_model_3d (3600, ObjectModel3D, CamParam, [], [], [])

这将创建一个在我的地平面的 X 轴上旋转 90° 的平面。到目前为止一切顺利.. 但无法弄清楚坐标现在在哪里.. 0/0 在哪里,以及如何沿地平面移动它,如上图所示。

4

1 回答 1

0

以这种方式解决它:

*shift pose to desired zero on ground plane…
set_origin_pose (Pose, -0.0134, 0.221343, 0.000, Pose)

grab_image (Image, AcqHandle)

*make a copy of the original pose and rotate it 90 degrees along the x axis.. New pose is with 0/0 in same location as ground pose, but perpendicular to it.
  newpose := Pose
  newpose[3] := newpose[3]-90
*move the vertical plane along the Y axis of the ground plane (Z axis of the vertical plane). In this case 15 cm…
  set_origin_pose (newpose, -0, -0, -0.15, newpose)

*klick on the image to measure coordinates in mm relative to the zero point of the vertical plane.
    while (1)
    disp_message (3600, 'Measure one point: left mouse button', 'window', 12, 12, 'red', 'false')
    disp_message (3600, 'Exit measure mode: right mouse button', 'window', 36, 12, 'red', 'false')
    get_mbutton (3600, Row, Column, Button)
   if (Button == 4)
        break
    endif
    dev_display (Image)
    dev_set_color ('green')
    disp_cross (3600, Row, Column, 6, 0)
    image_points_to_world_plane (CamParam, newpose, Row, Column, 1, X1, Y1)
    disp_message (3600, 'X = ' + X1, 'window', 320, 400, 'red', 'false')
    disp_message (3600, 'Y = ' + Y1, 'window', 340, 400, 'red', 'false')
endwhile
于 2020-06-05T13:13:01.133 回答