每次需要批量读取图片时,都要根据文件命名设计for循环实现,有时图片命名还没有规则就很难受。所以分享一种能自动读取路径下指定类型图像的函数。
by HPC_ZY
核心函数
话不多说直接上函数(欢迎复制,若有bug请评论留言告诉我)
function varargout = filesread(varargin)
narginchk(0,2)
filetypes = {'*.jpg';'*.png';'*.jpeg';'*.bmp';'*.dcm'};
if nargin<1
[~,filefolder,typeidx] = uigetfile(filetypes,'选择文件');
type = filetypes{typeidx};
else
filefolder = varargin{1};
filetype = ['*.',varargin{2}];
if ~ischar(filefolder)
error('请输入正确的文件路径');
end
typeidx = find(strcmp(filetype,filetypes));
if ~isempty(typeidx)
type = filetypes{typeidx};
else
error('请输入正确的文件类型,如jpg,png,jpeg,bmp,dcm');
end
end
files = dir([filefolder,type]);
if isempty(files)
error('路径下不含该类型图像');
end
filesname = {files.name}';
filesnum = length(files);
if typeidx~=5 % 读取普通图片
img = cell(filesnum,1);
for k = 1:filesnum
img{k} = imread([filefolder,filesname{k}]);
end
varargout{1} = img;
else % 读取DICOM影像
dcm = cell(filesnum,1);
dcminfo = cell(filesnum,1);
for k = 1:filesnum
dcm{k} = dicomread([filefolder,filesname{k}]);
dcminfo{k} = dicominfo([filefolder,filesname{k}]);
end
varargout{1} = dcm;
varargout{2} = dcminfo;
end
end
使用方法
选择(复制)你需要的调用方式,请勿直接运行以下代码
% 批量读取图像文件实例
% 目前仅支持jpg,png,jpeg,bmp,dcm
%
% varargout = filesread(varargin)
% 关于输入输出见下实例
%
% 根据需要选择你的方式,请勿直接运行该文件
%
% by HPC_ZY 20200705
clear; close all; clc
%% 实例一:读取图像(无输入)
% 不使用输入则通过弹窗手动选取的方式
im1 = filesread();
%% 实例二:读取图像(同时输入 路径+文件类型)
% 已知路径与类型可直接使用,免得每次都手动找
im2 = filesread('C:\Users\ASUS\Desktop\','jpg');
%% 实例三:读取DICOM文件(输入同一二例)
% dicom有两个输出,分别保存影像像素信息和其他信息
[dcmim,dcminfo] = filesread();
%% 其他
% 上述所有数据均保存在cell中,提取方法(使用大括号索引)如下
im = im1{2};
imshow(im)
im = im2{5};
imshow(im)
im = dcmim{15};
imshow(im)
其他
该函数只经过简单测试,若有bug请评论留言告诉我。
如果觉得好用,不妨给点个赞。
最后附上下载链接,内容与文中完全一致,不推荐下载,除非开了会员。