Halcon - 相对于校准地平面的垂直测量平面
Halcon - Vertical measure plane relative to the calibrated groundplane
我有一个相机,它正对着地平面看对角线。该平面已校准。这个平面上有一个物体,可以在任何距离(在相机的视野内),但总是会朝向相机旋转..(而不是与侧面成一定角度..)
我想测量这个物体的高度。我可以检测到下边缘的位置,它是否接触到地平面。是否可以在定义的位置将 "erect a measuring plane" 垂直于地平面进行排序,以便进行垂直测量?如果是,如何实现?
编辑:
到目前为止我想到了这个:
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 在哪里,以及如何沿着地平面移动它,如上图所示。
这样解决的:
*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
我有一个相机,它正对着地平面看对角线。该平面已校准。这个平面上有一个物体,可以在任何距离(在相机的视野内),但总是会朝向相机旋转..(而不是与侧面成一定角度..)
我想测量这个物体的高度。我可以检测到下边缘的位置,它是否接触到地平面。是否可以在定义的位置将 "erect a measuring plane" 垂直于地平面进行排序,以便进行垂直测量?如果是,如何实现?
编辑:
到目前为止我想到了这个:
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 在哪里,以及如何沿着地平面移动它,如上图所示。
这样解决的:
*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