检测图像通常是红色、绿色、蓝色还是黑色



我正在处理红色、绿色、蓝色或黑色的小图像(认为卡片排列在4色组中)。什么是一种好的、快速的算法来确定图像的颜色?

对于一组输入的示例,请参见此处,但图像可以缩放,因此它们不会那么清晰。

这些是您正在使用的精确图像吗?如果是,是否所有图像上都有一个像素将被着色?我在想西装在哪里。看看西装应该在哪里的像素,它会告诉你卡片是什么"颜色"。

更通用的方法可能包括分析整个图像(缓慢但有效),缩小图像并分析每个像素(如果你最终得到的是一个小图像,则更可行,但缩放可能会影响颜色),或者随机采样n像素(或像素的行/列),如果提前知道颜色的阴影,但你需要一个通用的方法吗?

哦,另一个想法:你控制输入图像的来源吗?也许你可以用一个数字来覆盖一些图像元数据阶段,以指示"颜色"。这有点作弊,因为它不涉及真实的图像处理,而且很容易被剥离/修改标签,但这可能是最快的方法。

这对于一个像素来说足够好:

def get_ishness(r,g,b):
    h,s,v = rgb_to_hsv(r,g,b) #h from 0-360, s and v from 0-100
    if v < 50: return 'black'
    if s < 15: return None
    if h < 10: return 'red'
    if 80 < h < 100: return 'green'
    if 210 < h < 230: return 'blue'
    return None

对于整个图像,我将红色、绿色、蓝色和黑色的像素相加,并返回像素最多的颜色。

这篇文章似乎已经解决了,但如果你不介意我的2美分。。。

在我看来,你需要一个通用的方法,而你事先不知道图像是什么。虽然已经发布的答案应该足够好,可以通过一些调整进行快速编码,但如果你仍然遇到问题,我建议你使用自组织映射:http://davis.wpi.edu/~matt/courses/soms/和http://www.ai-junkie.com/ann/som/som1.html

它可能需要一些(无监督的)训练时间来获得一个像样的地图/识别器(嘿,毕竟这是一个神经网络),但我遇到了一个有点像你的问题,它们对我来说很好(易于适应,灵活适应不同的光照等)。

最新更新