【问题标题】:How to count if an image has red color?如何计算图像是否为红色?
【发布时间】:2019-06-01 11:07:33
【问题描述】:

我的路上有一些照片。

我的程序必须计算有多少图片是红色的。

我开始循环,但我对如何检测图片是否为红色感到困惑。

这是我的循环:

sdirectory = 'E:\SEMESTER 7\Computer Vision\Tugas\UAS - Pencocokan Objek';
namafile = dir([sdirectory '/*.jpg']);
jml_obj = []
for k = 1:length(namafile)
    filename = [sdirectory '/' namafile(k).name];
    img = imread(filename);
    red = img(:,:,1);
    if(size(img,3)==3) %i think here is the key
        jml_obj=[jml_obj 1]
    else
        jml_obj=[jml_obj 0]
    end
end
jml_obj;
jumlah=sum(jml_obj);
textLabel1=  sprintf('Jumlah %i ',jumlah);
set(handles.jml, 'String', textLabel1);

【问题讨论】:

    标签: matlab colors


    【解决方案1】:

    如果您正在阅读彩色图像,那么所有图像都将具有红色、绿色和蓝色通道,因此size(img,3) 将始终等于 3。您实际上必须检查每个图像的像素内容以确定是否它有红色。

    但在此之前,您必须定义像素为红色的含义。您是在谈论近似红色,还是像 RGB(255,0,0) 这样的纯红色?一旦你有了红色的定义,你就可以遍历每个图像的像素并检查是否至少有一个像素满足你的定义。如果是这样,那么您可以增加您的计数器。

    【讨论】:

    • 我说的是近似红色
    • 在 RGB 空间中确定颜色可能很棘手,因此最好在 HSV 颜色空间中检查对应的 hueThis answer 解释的很好。
    • 我将此逻辑添加到精细的红色,但它不起作用:if(img(m, n, 1) < 80 || img(m, n, 2) > 80 || img(m, n, 3) > 100)
    • 红色不是一个值@Savithru 意味着您应该定义一个您将接受为红色的值范围,因为它不太可能在图像甚至一组图像中找到确切的红色值。使用 HSV 而不是 RGB 来完成此任务的最简单方法。正如 Savithru 所说
    猜你喜欢
    • 2011-10-28
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    相关资源
    最近更新 更多