在Halcon中,使用鼠标点选点云获取点云XYZ坐标值。

方法1:将点云或模型投影到2D相机平面,生成X,Y,Z map图,通过获取鼠标点选坐标,获取XYZ map图中对应的灰度值,该灰度值即模型鼠标点选的xyz坐标值。

方法2:通过将鼠标点选的点映射到三维空间中,将原点和点选点连成一条直线,求取三维直线和模型的最近距离点。

read_object_model_3d ('mvtec_bunny_normals', 'm', [], [], ObjectModel3D, Status)
dev_open_window (0, 0, 1920,966, 'black', WindowHandle2)

CamParam := ['area_scan_division',0.06,0,8.5e-06,8.5e-06,960,483,1920,966]
Pose := [-68.7544,-26.3678,825.156,0,0,0,0]
GenParamName := ['colored','color_0']
GenParamValue := [12,'light gray']
dev_get_window (WindowHandle)
disp_object_model_3d (WindowHandle, ObjectModel3D, CamParam, Pose, GenParamName, GenParamValue)
get_mbutton (WindowHandle, Row, Column, Button)
dev_close_window ()
*第一种方式
object_model_3d_to_xyz (X1, Y1, Z1, ObjectModel3D, 'cartesian_faces', CamParam, Pose)
get_grayval (X1, Row, Column, Xcord)
get_grayval (Y1, Row, Column, Ycord)
get_grayval (Z1, Row, Column, Zcord)

*第二种方式
image_points_to_world_plane (CamParam, Pose, Row, Column, 'm', X, Y)
pose_to_hom_mat3d (Pose, HomMat3D)
affine_trans_point_3d (HomMat3D, X, Y,0, Qx, Qy, Qz)
M:=sqrt((Qx*Qx+Qy*Qy+Qz*Qz))
Nx:=Qx/M
Ny:=Qy/M
Nz:=Qz/M

tuple_gen_sequence (0, Nx*2000, Nx, SequenceX)
tuple_gen_sequence (0, Ny*2000, Ny, SequenceY)
tuple_gen_sequence (0, Nz*2000, Nz, SequenceZ)
gen_object_model_3d_from_points (SequenceX, SequenceY, SequenceZ, Line)
affine_trans_object_model_3d (ObjectModel3D, HomMat3D, Object3DShow)


distance_object_model_3d (Object3DShow, Line, [], 3, [ 'store_closest_index' ], ['true'])
get_object_model_3d_params (Object3DShow,'&closest_index', GenParamValue2)
select_points_object_model_3d (Object3DShow, '&distance',0, 2, ObjectModel3DThresholded0)
get_object_model_3d_params (ObjectModel3DThresholded0, 'num_points', num_points)
if (num_points>0)
     get_object_model_3d_params (ObjectModel3DThresholded0, 'point_coord_x', px)
     get_object_model_3d_params (ObjectModel3DThresholded0, 'point_coord_y', py)
     get_object_model_3d_params (ObjectModel3DThresholded0, 'point_coord_z', pz)
endif



     distance_point_line (px, py, pz, 0, 0, 0, Qx, Qy, Qz, Distance)
     
     tuple_sort_index (Distance, Indices)
     if (|Indices|>2)
          tuple_select (px, Indices[0:1], pxSelected)
           tuple_select (py, Indices[0:1], pySelected)
            tuple_select (pz, Indices[0:1], pzSelected)
     endif
closestP:=sqrt(pxSelected*pxSelected+pySelected*pySelected+pzSelected*pzSelected)
 tuple_sort_index (closestP, Indices)
 tuple_select (pxSelected, Indices[0], px1)
tuple_select (pySelected, Indices[0], py1)
tuple_select (pzSelected, Indices[0], pz1)
gen_sphere_object_model_3d_center (px1, py1, pz1, 0.5, objectPointSelected)

show:=[Object3DShow,Line,ObjectModel3DThresholded0,objectPointSelected]

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值