从特定字符串读取 PLY 文件
Reading a PLY file from a specific string
我想按照 question. Sample PLY file is given here 中的建议,使用 dlmread
函数从字符串 end_header 的下一行开始将 PLY 文件读入 MATLAB 矩阵。目前起始行硬编码如下,但不适合,因为 PLY 文件中的 header 行数可能会更改。
data = dlmread(fileName, ' ', 14, 0);
有多种不同的方法可以做到这一点。一种选择是使用 textscan
to read in the entire file and a mix of strfind
and find
来确定包含 'end_header'
like
的行
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'
之后包含大量数据但在读取每一行之前不包含很多数据,这可能会更好,直到您使用 [=25 找到 'end_header'
=]
idx = 1;
fid = fopen(filename, 'r');
while isempty(strfind(fgets(fid), 'end_header'))
idx = idx + 1;
end
fclose(fid);
然后使用dlmread
或者根据我的提取数值数据。
我想按照 dlmread
函数从字符串 end_header 的下一行开始将 PLY 文件读入 MATLAB 矩阵。目前起始行硬编码如下,但不适合,因为 PLY 文件中的 header 行数可能会更改。
data = dlmread(fileName, ' ', 14, 0);
有多种不同的方法可以做到这一点。一种选择是使用 textscan
to read in the entire file and a mix of strfind
and find
来确定包含 'end_header'
like
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'
之后包含大量数据但在读取每一行之前不包含很多数据,这可能会更好,直到您使用 [=25 找到 'end_header'
=]
idx = 1;
fid = fopen(filename, 'r');
while isempty(strfind(fgets(fid), 'end_header'))
idx = idx + 1;
end
fclose(fid);
然后使用dlmread
或者根据我的