我正在处理小图像,这些图像将是红色,绿色,蓝色或黑色(想想卡片在4色套牌中排名)。什么是确定图像颜色的好的快速算法?
对于一组示例输入,请参阅here,但图像可以缩放等等,因此它们不会那么清晰。
答案 0 :(得分:2)
这些是你正在使用的完全图像吗?如果是这样,所有图像上都会有一个像素被着色?我在想这套衣服的位置。看看西装应该是哪一个像素,它会告诉你卡片的“颜色”。
更一般的方法可能包括分析整个图像(缓慢但有效),缩小图像并分析每个像素(如果您最终得到一个小图像但缩放可能影响颜色则更可行),或随机采样 n 像素(或像素的行/列),如果提前知道阴影的颜色,可能会有遮罩的东西,但是你需要一般方法吗?
哦 - 另一个想法:你是否控制输入图像的来源?也许你可以使用数字覆盖一些图像元数据标签以指示“颜色”。这是一种作弊,因为没有真正的图像处理,它很容易被剥离/修改标签,但它可能是最快的方法。
答案 1 :(得分:1)
这适用于一个像素:
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 :(得分:1)
这篇文章似乎已经解决,但如果你不介意我的2美分......
当我接受它时,你需要一个通用的方法,而你不知道图像是预先提供的。虽然已经发布的答案应该足够快,可以通过一些调整进行快速编码,如果你仍然遇到问题我建议你使用自组织地图:http://davis.wpi.edu/~matt/courses/soms/和http://www.ai-junkie.com/ann/som/som1.html
可能需要一些(无监督的)训练时间来获得一个像样的地图/识别器(嘿,它毕竟是一个神经网络),但我遇到了一个像你一样的问题而且它们对我来说效果很好(很容易适应,灵活的不同照明等。)。