如何计算图像的颜色和文件夹中的灰色图像。
filenames = dir('...\data\*.jpg');
img = cell(1,length(filenames));
for j = 1:length(filenames)
nume = filenames(j).name;
img{j} = imread(['...\data\' filenames(j).name ]);
if size(img{j}, 3) == 3
disp('Color');
else
disp('Grey');
end
end
我的方法不起作用。
答案 0 :(得分:0)
这不会改变你实际做的事情,但在检查中我会改用ndims function,它会返回图像矩阵中的维数:
if (ndims(img) > 2)
disp('RGB');
else
disp('Grayscale');
end
或者,您可以依赖基于imfinfo的更实体(但也更昂贵)的支票。该函数返回一个结构,其字段包含有关指定文件的信息。其中一个字段(ColorType
)可以帮助您识别RGB和灰度图像:
<强>的ColorType 强>
ColorType包括但不限于&#39; truecolor&#39;对于 真彩色(RGB)图像,&#39;灰度&#39;对于灰度强度图像, 或者&#39;索引&#39;索引图像。
示例:
file = ['...\data\' filenames(j).name ];
img{j} = imread(file);
info = imfinfo(file);
if (strcmp(info.ColorType,'grayscale'))
disp('Grayscale');
else
disp('RGB');
end
除了这个小调,@Suever在评论中说的非常重要。您的代码基于这样的假设:dir
命令以与您在操作系统中看到的文件名完全相同的顺序返回文件名...这可能是真的,但也是错误的。要执行一致性检查,应将当前文件名包含在结果中。这样,您将在图像及其对应的类型之间建立直接链接:
filenames = dir('...\data\*.jpg');
img = cell(1,length(filenames));
for j = 1:length(filenames)
file_name = filenames(j).name;
file_img = imread(['...\data\' file_name]);
img{j} = file_img;
if (ndims(file_img) > 2)
disp([file_name ' -> RGB']);
else
disp([file_name ' -> Grayscale']);
end
end