从特定字符串中读取PLY文件



我想使用本SOF问题中建议的dlmread函数,从字符串end_header的下一行开始,将PLY文件读取到MATLAB矩阵。PLY文件示例如下。目前,起始行按如下方式进行硬编码,但由于PLY文件中的标题行数可能会更改,因此不适用。

data = dlmread(fileName, ' ', 14, 0);

有很多不同的方法可以做到这一点。一种选择是使用textscan读取整个文件,并混合使用strfindfind来确定包含类似的'end_header'的行

filename = 'testPly.ply';
fid = fopen(filename);
data = textscan(fid, '%s', 'delimiter', 'n');
idx = find(cellfun(@isempty, strfind(data{1}, 'end_header')) == 0);
fclose(fid);

那么您可以使用dlmread作为

data = dlmread(filename, ' ', idx, 0);

或者根据我之前的回答提取数字数据。


另一种方法,如果你的文件在'end_header'之后包含很多数据,但在fgets 之前不包含很多数据的话,这可能会更好,那就是读取每一行,直到你找到'end_header'

idx = 1;
fid = fopen(filename, 'r');
while isempty(strfind(fgets(fid), 'end_header'))
    idx = idx + 1;
end
fclose(fid);

然后使用CCD_ 10或基于我之前的回答提取数字数据。

最新更新