How can i save images at the end of every iteration?

6 visualizzazioni (ultimi 30 giorni)
I have a code in which I am taking images from 2 different folders, processing it according to my need and trying to save the output of every iteration in a separate folder. But as I try to save the file with the help of imwrite command, I am getting the following error:
Unable to open file "Img.jpg" for writing. You might not have write permission.
I tried using different formats of images. I also tried fullfile, sprintf but its still giving the same error.
Here's the code:
raw_folder = 'C:\raw';
back_folder = 'C:\background';
raw_filename = dir(fullfile(raw_folder,'*.tif'))
back_filename = dir(fullfile(back_folder,'*.tif'))
total = numel(raw_filename)
for n = 1:total
r = fullfile(raw_folder, raw_filename(n).name);
b = fullfile(back_folder, back_filename(n).name);
R = imread(r);
B = imread(b);
% Some code.....
figure;imagesc(out,[50 60]);
fileLoc = 'C:\newcolor';
fname = fullfile(fileLoc, strcat('Image',num2str(n),'.jpg'));
% path = 'C:\color';
% imwrite(out,fullfile(path,strcat(num2str(i),'.jpg')));
How should I modify this code? Thank you.
  4 Commenti
Rik il 10 Giu 2021
And the code I posted tries to determine if Matlab can write in that folder at all.
Khushi Patni
Khushi Patni il 10 Giu 2021
I am getting this error: No such file or directory

Accedi per commentare.

Risposta accettata

Image Analyst
Image Analyst il 12 Giu 2021
Try it this way:
% By Image Analyst
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
workspace; % Make sure the workspace panel is showing.
fontSize = 20;
format compact;
raw_folder = pwd; %'C:\raw';
back_folder = pwd; %'C:\background';
raw_filename = dir(fullfile(raw_folder,'*.tif'))
back_filename = dir(fullfile(back_folder,'*.tif'))
numRawFiles = numel(raw_filename)
outputFolder = fullfile(raw_folder, 'Output');
if ~isfolder(outputFolder)
fprintf('Creating new folder for output called "%s".\n', outputFolder);
for n = 1:numRawFiles
inputFileName = fullfile(raw_folder, raw_filename(n).name);
backgroundFileName = fullfile(back_folder, back_filename(n).name);
R = imread(inputFileName);
B = imread(backgroundFileName);
% Some code.....
out = R;
hFig = figure;
imagesc(out,[50 60]);
baseFileName = sprintf('Image %2.2d.png', n); % Don't use JPG - use PNG instead.
fullOutputFileName = fullfile(outputFolder, baseFileName);
fprintf('Writing out "%s"\n', fullOutputFileName);
imwrite(out, fullOutputFileName);
% Delete figure
  6 Commenti
Image Analyst
Image Analyst il 13 Giu 2021
@Khushi Patni in the code you showed, n was not a vector, but then you did leave out some code where maybe you reassigned n. You should not reassign the loop iterator variable inside a loop. It will use it with your new value but once the loop starts again, it will ignore your change. My code did not have n as a vector. So, if we're done here, could you "Accept this answer"? Thanks in advance.

Accedi per commentare.

Più risposte (1)

Image Analyst
Image Analyst il 10 Giu 2021
Try this:
fileLoc = 'E:\Internship\SAMEER\dataset\CONTROLLED\advanced\newcolor';
if ~isfolder(fileLoc)
fprintf('Creating new folder called "%s".\n', fileLoc);
  6 Commenti
Rik il 12 Giu 2021
Why did you change your code so that n is a vector with non-integer values, but didn't say anything about what code you were using?
Image Analyst
Image Analyst il 12 Giu 2021
See code in my other answer I posted earlier today.

Accedi per commentare.


Scopri di più su Convert Image Type in Help Center e File Exchange




Community Treasure Hunt

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

Start Hunting!

Translated by