How to automatically save the output image file in a specified folder? - matlab

I am using Canny edge detection on images. Since my original 10 images are in the path folder, C:\Users\X\Desktop\FoodRGB as 01.jpg, 02.jpg, 03.jpg and so on, I want to save all my output images in the folder C:\Users\X\Desktop\FoodCanny as 01.jpg, 02.jpg, 03.jpg.
I figured that I have to use imwrite() function to write the output images in a specific folder but I am not sure about the big idea.
The following code I am using is saving the images as 0%d.jpg in FoodCanny Folder I manually created.
for k = 1:10
img = sprintf('C:\Users\X\Desktop\4\Food Canny\0%d.jpg',k);
imwrite(canny_image, 'C:\Users\X\Desktop\4\Food Canny\0%d.jpg');
end

Supposing you want to get canny edges of all screenshots in the C:\Users\Asus\Pictures\Screenshots and save them to the other folder D:\. You can do this by :
clc;clear all;
fpath = fullfile('C:\Users\Asus\Pictures\Screenshots','*.png');
img_dir = dir(fpath);
for k=1:length(img_dir)
input_image=strcat('C:\Users\Asus\Pictures\Screenshots\',img_dir(k).name);
original = rgb2gray(imread(input_image));
original= edge(original,'canny');
imwrite(original,strcat('D:\',sprintf('edge(%d).jpg',k)));
end

Related

How to add and delete image in folder(desktop) through matlab gui?

How to add and delete specific image in folder(desktop) through matlab gui?
For example, I have a folder name FLOWER. Then when I open the gui, I can add new image and delete image that have in folder FLOWER. To design the gui i have no problem, but I'm stuck at the code to add and delete image.
Link for screenshot folder:
[https://i.stack.imgur.com/TGDkf.png][1]
To create something, you could call the imwrite function(If I understand you correctly), and delete function could let you delete it.
Here are some demos:
%%Add and Delete image in folder
clc; clear;
%%Case1 : Save a figure
%Create
plot(1:10,1:10);
A=getframe(gcf);
%Write
imwrite(A.cdata,'D:/FLOWER/img1.jpg');
%%Case2 : Create a image
%Create
B=zeros(100:100);
B(1:50,:)=1;
%Write
imwrite(mat2gray(B),'D:/FLOWER/img2.jpg');
%%Case3 : Load and save a image
%Load
C=imread('D:/FLOWER/flower.png');
%Do something with image
%imshow(C);
%C=C/2;
%Write
imwrite(C,'D:/FLOWER/img3.jpg');
%pause
disp('You could check your image now')
pause()
%delete image
delete('D:/FLOWER/img1.jpg')
delete('D:/FLOWER/img2.jpg')
delete('D:/FLOWER/img3.jpg')
To run this demo, "flower.png" have to exist in the folder D:/FLOWER/ and then you will find a copy of it with the name of "img3.jpg"
You could also try copyfile('source','destination') in case3.(if you needn't show/change the image in the GUI)
P.S. you may change the absolute path of your folder since I changed my desktop's path.

How can I save set of altered images in new folder in MATLAB?

I have folder that consists of 10 images.
I am trying to apply a gaussian filter to each of them. I read images from a folder named dd and then I want to save the altered images in newfolder. However, when I look at the image it is empty.
How can I do this in correct way , read 10 images , filter them , save altered 10 images in new folder.
Here is the code that I have so far:
for img = 1:10
a = imread(['\dd\',int2str(img),'.pgm']);
G = fspecial('gaussian',[3 3],2);
Ig = imfilter(a,G,'same');
imshow(Ig);
imwrite( Ig, 'Ig.pgm '); % does not work !!
save ([ path,'\newfolder\', 'new.pgm'],'Ig');% it save empty image !!!
end
save is not for saving images. Instead, you will want to use imwrite for that. You will also want to provide the full path to imwrite and here we use mat2gray just to ensure that your data covers the entire dynamic range of the image type. You'll also want to be sure that each output image has a unique name so that they don't overwrite one another.
output_filename = fullfile(path, 'newfolder', sprintf('%d_new.pgm', img));
imwrite(mat2gray(Ig), output_filename, 'pgm');
As a side note, you'll want to use fullfile to reliably construct your folder paths across computers and operating systems.

Being able to read images from any directory

I'm new to Matlab and I am having some problems with reading images and dealing with directories and things like that. I had an assignment where I was to write a script that converts an image that is not grayscale into grayscale (for example, if the image is truecolor, convert to grayscale).
This was my code:
img = uigetfile('*');
imgx = imfinfo(img);
imgx.ColorType
if imgx.ColorType == 'truecolor'
img = imread(img);
img = rgb2gray(img);
end
However, I ended up getting points off for the following:
"only works if image is in the same folder as script"
I realize that my script only works for images that are in folders that are on the MATLAB path, so I don't know if that's a separate issue from what he said or if that's what he meant. I assume he wants to be able to select any image on your computer to be able to read and perform the operation, but I don't know how to approach this. Can anyone help me?
The problem is that img = uigetfile('*') returns only the file name as string. To work with pictures in folders other than matlab folder you would need to extract the full path. You can do this using the following approach:
[fileName, folderName] = uigetfile('*');
img=fullfile(folderName, fileName);
imgx = imfinfo(img);
The rest of your code should work after this small change

loading multiple tiff images as matrices from a dir

my problem is this one:
I have a directory full of .tif images and I want to import them in MATLAB each one as a matrix.
If I do right click on the file in the dir and say "Import Data" it works: I have a matrix of elements that are my pixels that I can treat with imagesc and so on.
I want to make it automatic with a script.
what I have written is this one but it opens the Import Wizard, ask me to click enter for importing the first one and then stops.
contents = dir('*pulse1us100ms26_00*'); % this is part of the name of the images I want to load
for i = 1:numel(contents)
filename = contents(i).name;
uiimport(filename);
end
??? Error using ==> uiimport at 65
Cannot open the Import Wizard on a file while the Import Wizard is open.
May you please help me?
I think imread may be what you need,
% this is part of the name of the images I want to load
contents = dir('pulse1us100ms26_00*');
for i = 1:numel(contents)
filename = contents(i).name;
im = imread(filename,'tiff');
imagesc(im(:,:,1:3))
pause(3)
end
The result will be a matrix of uint8 from 0 to 255 (depending on the picture format). You can then work with them as needed.

resize images and keep them with new size in new folder in matlab

I write the following code in matlab. from this code I take sequence of images as input from a folder and resize these images. Now I need to store them with new size on output folder. any one help me to update this code.
fileFolder = fullfile('D:','Texture DataBases','images3000');
dirOutput = dir(fullfile(fileFolder,'image*.jpg'));
fileNames = {dirOutput.name};
for k=1:length(fileNames)
H=fileNames{k};
S=imread(H);
I-resize(S, [300 300]);
imshow(I);
end
......
......
I think you meant:
I=imresize(S, [300 300]);
You can save images with imwrite:
imwrite(I,fullfile('D:','New_folder',H);
Additionally, you can use mkdir to create the new output folder (New_folder in the example above).