halcon读取点云测高
1、点云数据链接:https://pan.baidu.com/s/14SD1DIDptyOiuyQy3kTebA
提取码:rqy4
2、思路:读取om3格式点云;
获取电池表面点云Z值平均值;
获取底面点云Z值平均值;
两个点云Z值平均值相减获得电池高度;
3、halcon代码实现:
dev_get_window (WindowHandle)
*1读入点云数据(文件中)
read_object_model_3d ('./2020-01-10-235331.om3', 'm', [], [], ObjectModel3D, Status)
* visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib','disp_pose'],\
['color1','coord_z','true'], [], [], [], PoseOut)
*2得到电池表面点云的数据(mm)
get_object_model_3d_params (ObjectModel3D, 'point_coord_z', GenParamValue)
*去掉噪点
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 15, 16, ObjectModel3DThresholded)
connection_object_model_3d (ObjectModel3DThresholded, 'distance_3d', 1, ObjectModel3DConnected)
get_object_model_3d_params (ObjectModel3DConnected, 'num_points', GenParamValue1)
select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 1000, 50000, ObjectModel3DBattery)
* visualize_object_model_3d (WindowHandle, ObjectModel3DBattery, [], [], ['lut','color_attrib','disp_pose'],\
['color1','coord_z','true'], [], [], [], PoseOut)
*3得到背景的点云数据集合(mm)
select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 12, 14, ObjectModel3DBackGround)
* visualize_object_model_3d (WindowHandle, ObjectModel3DBackGround, [], [], ['lut','color_attrib','disp_pose'],\
['color1','coord_z','true'], [], [], [], PoseOut)
*4求电池上表面点云的z坐标值,求背景表面的点云的z坐标值
get_object_model_3d_params (ObjectModel3DBattery, 'point_coord_z', GenParamValueHeigtBattery)
get_object_model_3d_params (ObjectModel3DBackGround, 'point_coord_z', GenParamValueHeigtGround)
*5求电池上表面点云的z坐标的平均值,求背景表面点云的z坐标的平均值
HeigtBattery :=mean(GenParamValueHeigtBattery)
HeightGround :=mean(GenParamValueHeigtGround)
*8求电池表面的高度
H := HeigtBattery-HeightGround
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], \
['lut','color_attrib','disp_pose'],\
['color1','coord_z','true'], \
'电池点云的高度为'+H+'mm', \
'Battery Object',\
[], PoseOut)
* disp_object_model_3d (WindowHandle, ObjectModel3D, [],\
[], \
'color', \
'primitive')
4、效果图: