我正在寻找一种算法或代码来在客户端找到相似的像素(具有相似颜色的像素)并改变那些像素的颜色。我搜索了很多,但找不到任何寻找相似像素的公式。我想要制作的东西就像Photoshop中的Magic Wand工具。因此,使用此工具,我们可以将产品的某些部分着色以制作自定义颜色。我们在生产中也有一些颜色限制,我们可以使用一些颜色。 我试图用一些公式找到一个逻辑:找到每个像素的欧几里德距离,用画布和java脚本与邻居的像素进行比较,然后比较数量。但它运作不佳。缺点是每张图片都有相似颜色但颜色不同的像素。该算法在寻找不同色调方面不是很聪明。但是在Photoshop中我们可以使用魔棒工具选择一个颜色相同的区域,然后将该区域扩展为具有“相似”选项的相似颜色。
答案 0 :(得分:0)
到目前为止你有什么?如果你共享你到目前为止所写的相关代码(即搜索像素,比较像素颜色......),将会很有帮助。
如果您还没有,可能需要熟悉floodfill algorithms。这将是您的遍历算法的基础。
根据我的理解,颜色比较并不是一个完全解决的问题。三维欧氏距离测量并不是一个坏主意,并且是一种简单的实施方案。 This article建议“[计算]所选颜色中每个成分与当前颜色之间的绝对差异。我们说两种颜色之间的差异是各个颜色成分之间的最大差异。”
但是,人类不会将颜色差异视为红色,绿色和蓝色特征的差异。
您有兴趣阅读的另一页:How to compare two colors for similarity/difference。这个问题的一个答案是建议计算颜色的HSL值,然后使用公式: avghue =(color1.hue + color2.hue)/ 2 distance = abs(color1.hue-avghue)
如果你想进入一些色彩理论,Delta-E可以为你提供一些颜色差异的洞察力。
答案 1 :(得分:0)
您的解决方案可能是让您的用户挥动魔棒!
因此,不要通过点击魔棒选择1种颜色,而是让用户将魔棒拖过多个像素。
累积用户拖动的任何独特颜色。
然后根据累积的颜色组而不是1种颜色进行颜色更改。
是的,它不像Photoshop的魔杖容差设置那么自动,但替代人眼/大脑并不是一件坏事!
@Austin对色彩理论与人眼无法协调是对的。欧几里德方法将进行数学色彩匹配...但人眼对于它如何感知颜色非常挑剔。
你提到“不同颜色的阴影”......
您可能会考虑以HSL颜色格式呈现图像,以便更容易进行颜色比较。
HSL不是混色(如rgb),而是将颜色分解为色调(颜色),饱和度(深度)和亮度(光亮度,亮度)。
在HSL中,所有色调(颜色)都按算术组合在一起,因此您可以请求指定蓝色的所有蓝色加上最近的10个蓝色色调。