halcon|读取3d相机点云数据
最近发现很多小伙伴在使用halcon处理3d工业相机扫描结果的时候遇到了“如何读取”的问题。一般的3d工业相机储存数据的格式有txt格式、tif格式、csv格式、ply格式、ptx格式、bin格式、obj格式等。
txt格式
读取txt文件生成3d模型一般需要分析txt文件的储存格式,下图是我使用的工业相机储存的部分txt数据:
经过分析,前3列为x、y、z坐标,第4列到第6列为每一点的法线坐标nx、ny、nz,第7列到第9列为灰度值。因此我们采用以下代码重构3d模型:
open_file ('data.txt', 'input', xyz) #打开文件x :=[]y :=[]z :=[]nx :=[]ny :=[]nz :=[]gray :=[]fread_line (xyz, outline, iseof) #读文件中一行的字符串tuple_split (outline, ' ', substrings) #根据空格分割一行的字符串while (iseof==0) #将x y z nx ny nz gray分别存储在不同的元组中 x :=[x,substrings[0]] y :=[y,substrings[1]] z :=[z,substrings[2]] nx :=[nx,substrings[3]] ny :=[ny,substrings[4]] nz :=[ny,substrings[5]] gray :=[gray,substrings[6]] fread_line (xyz, outline, iseof) tuple_split (outline, ' ', substrings)endwhileclose_file (xyz) #关闭文件tuple_number (x, numberx) tuple_number (y, numbery) tuple_number (z, numberz) #将字符串转化为数字gen_object_model_3d_from_points (numberx, numbery, numberz, objectmodel3d) #构建3d模型visualize_object_model_3d (3600, objectmodel3d, [], [], [], [], [], [], [], poseout) #显示3d模型
代码中的iseof参数为循环的判断变量,当文件未到末尾时,iseof为0;当文件到达末尾时,iseof为1。
3d模型显示结果如下:
注意:1、通过元组生成3d模型时,采用gen_object_model_3d_from_points算子;2、一些3d相机的txt文件的数据之间采用@相连,此时应使用@对字符串进行分割。
tif格式
tif图片格式是工业相机损失较小的图片格式。一般3d相机会将不同的数据保存在不同的tif图片中。下图是我使用的工业相机储存的tif文件:
其中,pointcloud_x
pointcloud_y pointcloud_z为将点云的xyz坐标作为灰度值生成的图片,normalmap_x normalmap_y
normalmap_z为将点云的xyz法线坐标作为灰度值生成的图片,texture为一般的灰度图片。可使用以下代码重构3d模型:
其中,读取的pointcloudx pointcloudy pointcloudz等图片也可以先做blob分析之后再合成3d模型。此时,若pointcloudx pointcloudy pointcloudz的大小不一致,代码:
生成的3d模型将以pointcloudx为准。
注意:与算子gen_object_model_3d_from_points作对比,当通过图片生成3d模型时,采用xyz_to_object_model_3d算子。
halcon直接读取
我购买的工业相机可以直接采用以下代码实时抓取数据,可以作为其他工业相机实施抓取数据的参考。
open_framegrabber ('phoxi', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'default', '2018-08-034-lc3', -1, -1, acqhandle) #打开相机get_framegrabber_param (acqhandle, 'revision', revision) #得到相机参数grabdataitems:=['pointcloud', 'texture', 'normalmap', 'confidencemap']set_framegrabber_param (acqhandle, 'grab_data_items', grabdataitems) #设置相机参数grab_data (imagedata, region, contours, acqhandle, data) #抓取数据select_obj (imagedata, xyz, 1) #选择3维数据xyz(点云坐标)select_obj (imagedata, texture, 2) #选择1维度数据textureselect_obj (imagedata, normals, 3) #选择3维数据normals(法线)select_obj (imagedata, confidence, 4) #选择1维数据confidencedecompose3 (xyz, ximage, yimage, zimage) #将xyz分解为x y z三通道decompose3(normals, nx, ny, nz) #将normals分解为nx ny nz三通道
同样,可以对其中任意一张图像做blob分析等操作,也可采用:
生成3d模型并进行显示。
csv格式
csv格式(comma-separated values)直译为逗号分隔值(也称字符分隔值,因为分隔字符也可以不是逗号),是一种以逗号作为分隔符,对数据进行直接记录的文件。
读取csv文件生成3d模型一般需要分析csv文件的储存格式。我们先创建一个csv文件。如下图所示,直接创建txt文件,每一行保存一个点云坐标,不同坐标之间采用“,”作为分隔符,另存为csv文件即可。
结果如下:
ply格式
ply是halcon可识别的3d模型储存格式,可以直接打开。
结果如下:
Intel独显:任重而道远
台积电的5nm制程已准备量产预计第二季度放量
石英振荡电路的组成与设计,石英晶振内部电路分析说明
Google新款 Brillo物联网操作系统可完整支持MIPS CPU架构
据说市面上追求极致低功耗的血糖仪都这么做
3D相机点云数据“如何读取”
音频发送器芯片DP7406
一文解析AI拍照技术
浅谈芯片低功耗的设计实现
5G技术趋于成熟小米将有机会成为引领者
为何区块链的用户量局限这么大
基于模型设计和产品代码实现汽车线控驾驶系统的应用方案
施耐德电气首席数字官:全面数字化时代来临,5G大规模应用一触即发
如何在树莓派上安装Kodi
银川发放7张自动驾驶路测牌照,开放全长约7km的自动驾驶体验路线
指令集是什么?ARM封杀对华为有什么影响
HUAWEI CONNECT 2023|中软国际荣获华为“产品组合方案最佳实践合作伙伴奖”
pcb常用元器件名称大全
设计互联医疗设备,克服射频技术挑战是关键
瑞萨e2studio----DAC