我有一台与地面成对角线的相机。该飞机已经过校准。在该平面上有一个物体,该物体可以在任何距离上(在摄影机的视野内),但始终会朝摄影机旋转。(而不是与侧面成一定角度。)
我想测量这个物体的高度。我可以检测到下边缘的位置,如果它接触到了地平面。为了在垂直方向上进行测量,是否可以在定义的位置对垂直于地平面的“测量平面”进行排序?如果是,该怎么办?
编辑:
到目前为止,我想到了这个:
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在哪里,以及如何沿着地平面移动它,如上图所示。
答案 0 :(得分: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