あなたのコードに関する1つのこと:行はループの外側にあるため、ループからの変数fprintf(1, '#%3d %15u %15u %15u %15u\n', i, a(i), b(i),c(i);
の最後の値のデータのみを出力します。i
これが、印刷される行が 1 行だけになる理由です。
出力の美化に関しては、次のようなことを試すことができます。
fprintf(1, '%15s\t%9s\t%9s\t%19s\n', 'Object #','Area','Perimeter','Centroid');
for i=1:num
fprintf(1, '%15.5f\t%9.5f\t%9.5f\t%9.5f:%9.5f\n', i, s(i).Area, s(i).Perimeter, s(i).Centroid );
end
ヘッダー行とデータ行を印刷する場合、各部分のフィールド幅は同じであることに注意してください。
このコードは、関数の結果を出力することを想定していますregionprops
。この場合Centroid
、 は単一の数値ではなく、領域重心の x 位置と y 位置を示す 2 要素ベクトルです。
または、ループなしで同じことを行うことができます
DataToPrint = [
[1:num]
[s.Area]
[s.Perimeter]
[s.Centroid]
];
fprintf(1, '%15s\t%9s\t%9s\t%19s\n', 'Object #','Area','Perimeter','Centroid');
fprintf(1, '%15.5f\t%9.5f\t%9.5f\t%9.5f:%9.5f\n', DataToPrint );
EDIT:これをファイルに保存したい場合は、次のように書く必要があります:
fid = fopen('YourFileName.txt','w'); % open file for writing
fprintf(fid, '%15s\t%9s\t%9s\t%19s\n', 'Object #','Area','Perimeter','Centroid');
fprintf(fid, '%15.5f\t%9.5f\t%9.5f\t%9.5f:%9.5f\n', DataToPrint );
fclose(fid); % close file
詳細については、 http://www.mathworks.com/help/matlab/low-level-file-io.htmlを参照してください。