3d object是什么文件_Halcon|读取3D相机点云数据

点击上方“新机器视觉”,选择加"星标"或“置顶”

重磅干货,第一时间送达

9af51651098219bba725de6680068391.png

Halcon|读取3D相机点云数据

最近发现很多小伙伴在使用Halcon处理3D工业相机扫描结果的时候遇到了“如何读取”的问题。一般的3D工业相机储存数据的格式有txt格式、tif格式、csv格式、ply格式、ptx格式、bin格式、obj格式等。

txt格式

读取txt文件生成3D模型一般需要分析txt文件的储存格式,下图是我使用的工业相机储存的部分txt数据:

0b09b8da3334cc96782337b8aa082af7.png经过分析,前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模型显示结果如下:2a38aadefee3371a44d9688fdcbe5f21.png注意:1、通过元组生成3D模型时,采用gen_object_model_3d_from_points算子;2、一些3D相机的txt文件的数据之间采用@相连,此时应使用@对字符串进行分割。

tif格式

tif图片格式是工业相机损失较小的图片格式。一般3D相机会将不同的数据保存在不同的tif图片中。下图是我使用的工业相机储存的tif文件:e6daa7203373febbd5bdc4f85fe32251.png其中,PointCloud_X PointCloud_Y PointCloud_Z为将点云的XYZ坐标作为灰度值生成的图片,NormalMap_X NormalMap_Y NormalMap_Z为将点云的XYZ法线坐标作为灰度值生成的图片,Texture为一般的灰度图片。可使用以下代码重构3D模型:

fdba44ecd338ee4eb385df2087dc6752.png

cfc7acb4f9a0aeb88aed26231937a818.png其中,读取的PointcloudX PointcloudY PointcloudZ等图片也可以先做Blob分析之后再合成3D模型。此时,若PointcloudX PointcloudY PointcloudZ的大小不一致,代码:

f610b6ddd9f07878dee0b2dc5fd57410.png

生成的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分析等操作,也可采用:

dab618c7b91f2f13869f82fa5e483426.png

生成3D模型并进行显示。

CSV格式

CSV格式(Comma-Separated Values)直译为逗号分隔值(也称字符分隔值,因为分隔字符也可以不是逗号),是一种以逗号作为分隔符,对数据进行直接记录的文件。

读取csv文件生成3D模型一般需要分析csv文件的储存格式。我们先创建一个csv文件。如下图所示,直接创建txt文件,每一行保存一个点云坐标,不同坐标之间采用“,”作为分隔符,另存为csv文件即可。39eb6509b9921e1e38dd03ffe79a60dd.png

e2c8ed3600167764693f5878a948747d.png

结果如下:3b3d7903cc6f3e6560f19c5ae0a33a14.png

ply格式

ply是Halcon可识别的3D模型储存格式,可以直接打开。

1bcb07cb7bc5702596414474c14643ee.png

结果如下:cf3dba0195a656eaab296d337f2fabb9.png

转自:https://blog.csdn.net/qq_41738631/article/details/86530390

感谢志远呀博主的分享

93852cb53b0f747e8a6eeba5a52f5af6.gif End 93852cb53b0f747e8a6eeba5a52f5af6.gif

声明:部分内容来源于网络,仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥,请联系删除。

c701f384415ae6197db55ce870652feb.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值