1

空间数据 (.png)

001.png
002.png
003.png
.
.
.
00n.png

001.mat
002.mat
003.mat
.
.
.
00n.mat
4

2 回答 2

3

补充 EitanT 的答案,如果您的文件没有此类文件名限制,例如:

file01.png
file02.png
fls1.png
fls2.png
pics001.png
pics002.png

您可以使用dir函数,这为您提供了更多的灵活性。例如:

filenames = dir('*.png'); %# get information of all .png files in work dir
n  = numel(filenames);    %# number of .png files

for i = 1:n
    A = imread( filenames(i).name );

    %# gets full path, filename radical and extension
    [fpath radical ext] = fileparts( filenames(i).name ); 

    save([radical '.mat'], 'A');                          
end

fileparts是一个 MATLAB 函数,它分解文件路径中的文件名、部首和扩展名。例如,如果我有文件/home/user/photo.png,这个函数将返回:

fpath   = /home/user
radical = photo
ext     = .png

文件格式错误

OP收到以下错误:

???在 387 处使用 ==> imread 时出错 无法确定文件格式。==> PNG2MATFiles 中的错误 5 A = imread( filenames(i).name );

我已经下载了他的原始 *.png 图像并使用filelinux 命令对其进行了测试。我的输出:

FY2E_2011_09_01_00_01_ir1_proj.png: Matlab v5 mat-file (little endian) version 0x0100 FY2E_2011_09_01_01_01_ir1_proj.png: Matlab v5 mat-file (little endian) version 0x0100 FY2E_2011_09_01_02_01_ir1_proj.png: Matlab v5 mat-file (little endian) version 0x0100 FY2E_2011_09_01_03_01_ir1_proj.png: Matlab v5 mat-file (little endian) version 0x0100 FY2E_2011_09_01_04_01_ir1_proj.png: Matlab v5 mat-file (little endian) version 0x0100 FY2E_2011_09_01_05_01_ir1_proj.png: Matlab v5 mat-file (little endian) version 0x0100 FY2E_2011_09_01_06_01_ir1_proj.png: Matlab v5 mat-file ( little endian) 版本 0x0100 FY2E_2011_09_01_07_01_ir1_proj.png: Matlab v5 mat-file (little endian) 版本 0x0100 FY2E_2011_09_01_08_01_ir1_proj.png: Matlab v5 mat-file (little endian) 版本 0x0100 FY2E_2011_ir1_proj0.png_2011_ir1_proj_09_Matlab v5 mat-file (little endian) 版本 0x0100 FY2E_2011_09_01_10_01_ir1_proj.png: Matlab v5 mat-file (little endian) 版本 0x0100

imread无法打开这些文件,'png'因为它们已经存储为.mat.

于 2012-08-08T21:06:21.083 回答
2

尝试这个:

for i = 1:n
    A = imread(['00', num2str(i), '.png'], 'png');  %# Read PNG file
    save(['00', num2str(i), '.mat'], 'A');          %# Store data to MAT file
end
于 2012-08-08T20:22:22.390 回答