计算文件夹上的颜色和灰色图像,Matlab

时间:2018-01-28 18:43:22

标签: matlab

如何计算图像的颜色和文件夹中的灰色图像。

    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

我的方法不起作用。

1 个答案:

答案 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