我试图从MATLAB中的函数调用返回4D图像数据数组。我在MATLAB中不是很先进,我也不知道我必须从函数返回什么类型的数据。这是我的功能:
function classimg = loadImages(classdir,ext)
% create array of all images in directory
neg = dir([classdir ext]);
% get size of array (to loop through images)
numFileNeg = max(size(neg));
% create a 4D array to store our images
classimg = zeros(51,51,3,numFileNeg);
% loop through directory
for i=1:numFileNeg
classimg(:,:,:,i) = imread([myDir neg(i).name]);
end
end
这是函数调用:
negativeImgs = loadImages("C:\Users\example\Documents\TrainingImages\negatives\","*.jpg");
我找不到任何返回类型的在线文档?有谁知道这会是什么?正确填充classimg
,以便代码内部工作。
答案 0 :(得分:2)
将classimg初始化为51x51x3xnumFileNeg零的矩阵。您使用零功能,因此数据类型为double。要清楚地看到这一点,请从命令窗口调用您的函数,然后键入“whos”以查看classimg的大小和数据类型。
答案 1 :(得分:0)
As Mike correctly points out,因为您使用zeros
初始化classimg
,并且默认数据类型为double
,您的图像数据将从任何数据类型转换为double {{ 3}}返回(imread
)。
如果您希望classimg
与图片的数据类型相同(我假设所有图片的类型相同),您可以加载一张图片,获取often uint8
,并使用该特定类初始化classimg
。以下是如何重写您的功能:
function classimg = loadImages(classdir, ext)
neg = dir(fullfile(classdir, ext));
numFileNeg = numel(neg);
tempImage = imread(fullfile(classdir, neg(1).name));
classimg = zeros(51, 51, 3, numFileNeg, class(tempImage));
classimg(:, :, :, 1) = tempImage;
for i = 2:numFileNeg
classimg(:, :, :, i) = imread(fullfile(classdir, neg(i).name));
end
end
请注意,我做了其他一些更改。我使用class而不是目录和文件名的连接,因为它为您处理fullfile
的任何问题。我还使用file separators来获取文件数numel
。