Mammo
Mammo

Reputation: 19

How to read specific images from one folder has different types of images and text files and save into another one

I have a folder with 10 subfolder each has about 100 different files including text files and different extension images. I just need to copy the image files with JPG extension and move it to another single folder.

I am using this code:

clear all
clc
M_dir = 'X:\Datasets to be splitted\Action3\Action3\'% source directory
D_dir = 'X:\Datasets to be splitted\Action3\Depth\'
files = dir(M_dir);% main directory
dirFlags = [files.isdir];
subFolders = files(dirFlags);%list of folders
for k = 1 :length(subFolders)
    if any(isletter(subFolders(k).name))
        c_dtry = strcat(M_dir,subFolders(k).name)
             fileList = getAllFiles(c_dtry)%list of files in subfolder
             for n1 = 1:length(fileList)
                 [pathstr,name,ext] = fileparts(fileList{n1})% file type 
                 %s = dir(fileList{n1});
                 %S = s.bytes/1000;%file size
                 Im = imread(fileList{n1});
                 %[h,w,d] = size(Im);%height width and dimension
                 if strcmp(ext,'.jpg')|strcmp(ext,'.JPG')%)&S>=50&(write image dimension condition))%  here you need to modify
                    baseFileName = strcat(name,ext); 
                    fullFileName = fullfile(D_dir, baseFileName); % No need to worry about slashes now!
                    imwrite(Im, fullFileName);
                 else 
                   end
               end
    end

end

But the code is stopped with an error when a text file being processed.

The error says:

Error using imread>get_format_info (line 491)
Unable to determine the file format.

Error in imread (line 354)
        fmt_s = get_format_info(fullname);

Error in ReadFromSubFolder (line 16)
                 Im = imread(fileList{n1});

Thanks

Upvotes: 0

Views: 221

Answers (2)

matlabgui
matlabgui

Reputation: 5672

Your code is reading the data before you check the extension

Im = imread(fileList{n1});

is before

if strcmp(ext,'.jpg')|strcmp(ext,'.JPG')

edit

For finding files which end 'vis' you can usestrcmp

strcmp ( name(end-2:end), 'vis' )

For completeness you should also check that name is longer than 3 char.

Upvotes: 2

Sardar Usama
Sardar Usama

Reputation: 19689

Here is a relatively simpler solution using dir and movefile or copyfile depending on whether you want to move or copy:

%searching jpg files in all subdirectories of 'X:\Datasets to be splitted\Action3\Action3'
file = dir('X:\Datasets to be splitted\Action3\Action3\**\*.jpg'); 
filenames_with_path = strcat({file.folder},'\',{file.name});
destination_dir = 'X:\Datasets to be splitted\Action3\Depth\';
%mkdir(destination_dir);   %create the directory if it doesn't exist
for k=1:length(filenames_with_path)
    movefile(filenames_with_path{k}, destination_dir, 'f');   %moving the files
    %or if you want to copy then: copyfile(filenames_with_path{k}, destination_dir, 'f'); 
end

Upvotes: 0

Related Questions