Imwrite() problem with saving sequence images

First, i try to load .mat file into my workspace files = dir('*.mat'); for i = 1:numel(files) load(files(i).name);
Second, i want to read the images in work space and save it as following for k=0:10 output_folder = 'C:\Users\Tossaworn\Desktop'; outputFileName = fullfile(output_folder, ['test' num2str(k) '.tif']);
imwrite(IR0000__,outputFileName); end
IR0000__ is 1 image, but i want IR0001__,IR0002__, ...and output test0,1,2,... . Now output can run, but i have no idea to read the input images. please suggest, Thank you.

 採用された回答

Guillaume
Guillaume 2018 年 5 月 25 日

1 投票

Here is how I would do it:
output_folder = 'C:\Users\Tossaworn\Desktop';
files = dir('*.mat');
for fidx = 1:numel(files)
matcontent = load(files(fidx).name); %load into structure
filenumber = regexp(files(fidx).name, '\d+', 'match', 'once'); %get numeric part of filename
imagename = sprintf('IR%s__', filenumber); %build variable name
assert(isfield(matcontent, imagename), 'mat file %s does not contain image %s', files(fidx).name, imagename);
outputfilename = fullfile(output_folder, sprintf('test%s.tif', filenumber));
imwrite(matcontent.(imagename), outputfilename);
end

5 件のコメント

Tossawon Ngamnet
Tossawon Ngamnet 2018 年 5 月 25 日
Oh, many thanks. Its work perfectly.
thank you so much
Tossawon Ngamnet
Tossawon Ngamnet 2018 年 5 月 29 日
I have written this code to create multiple .tif to be avi video, but something wrong with my code. Could you help me to solve this?
Guillaume
Guillaume 2018 年 5 月 29 日
編集済み: Guillaume 2018 年 5 月 29 日
Please don't post screenshots of code, it's impossible to copy and paste from a screenshot.
If your tiff images are 16-bit then imread should already return a uint16 array, hence your conversion to uint16 is redundant. To convert a uint16 image to double use im2double, which rescale the intensities to the range 0-1. So
I = imread(filename);
writeVideo(outputVideo, im2double(I));
Tossawon Ngamnet
Tossawon Ngamnet 2018 年 5 月 29 日
編集済み: Guillaume 2018 年 5 月 29 日
Sorry for my careless. I did the code follow your suggestion. Its work, but the avi file cannot open. Code below:
outputVideo = VideoWriter('newvideo.avi');
outputVideo.FrameRate = 30;
outputVideo.Quality = 100;
open(outputVideo);
srcFiles = dir('C:\Users\Tossaworn\Desktop\testTIFfiles\*.tif');
for k = 1 : length(srcFiles)
filename = strcat('C:\Users\Tossaworn\Desktop\testTIFfiles\',srcFiles(k).name);
I = imread(filename);
writeVideo(outputVideo, im2double(I));
end
Is that due to unspecified size?
Guillaume
Guillaume 2018 年 5 月 29 日
You're missing a
close(outputVideo);
at the end. If that's not the reason for the problem, then I don't know. Try a different video player which may give more insight.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeImages についてさらに検索

製品

リリース

R2017a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by