【问题标题】:Changing colors in a template image更改模板图像中的颜色
【发布时间】:2012-02-02 16:44:20
【问题描述】:

我有一些代码可以将模板图像中的单一颜色转换为用户选择的其他颜色。例如,如果红色 RGB(255,0,0) 是模板颜色,则将红色像素转换为新颜色 RGB(r,g,b) 非常简单。但是假设我的模板图像中有一系列红色渐变,例如RGB 值因模板中的每个像素而异。是否有一些公式或过程可用于将模板中的每个像素转换为与新颜色一致的像素?

谢谢, 凯文

【问题讨论】:

  • 你在说什么模板?
  • 例如,只是一个位图图像。

标签: image graphics colors


【解决方案1】:

假设一个像素不能有渐变,但它有一个 RGB(每个通道 8 位或 16 位或 32 位)颜色代码,您应该设置一个容差变量,以百分比表示,这将使颜色代码仍被视为与模板相同的颜色。

用伪代码说:

tolerance=10%
IF Rpixel - tolerance <= Rtemplate <= Rpixel + tolerance AND
   Gpixel - tolerance <= Gtemplate <= Gpixel + tolerance AND
   Bpixel - tolerance <= Btemplate <= Bpixel + tolerance THEN

    YEAH they match.

当然,这需要在源图像中进行逐像素比较。

编辑: 考虑到它的颜色变化来改变“容忍”的颜色很简单:

deltaR = Abs(Rpixel - Rtemplate)
deltaG = Abs(Gpixel - Gtemplate)
deltaB = Abs(Bpixel - Btemplate)

sourceR = destinationR +/- deltaR;
sourceG = destinationG +/- deltaG;
sourceB = destinationB +/- deltaB;

【讨论】:

  • 对不起,如果我使用的术语不太正确,我希望必须按照您的建议进行逐像素比较。无论如何,设置容差是个好主意。但是,一旦我确定是否要更改像素,我还希望为新颜色设置等效的阴影或渐变。考虑这张图片:tinyurl.com/6p3amcu。现在,如果用户选择了一种蓝色作为新颜色,我希望图像左上角有浅蓝色,右下角逐渐变为深蓝色。有没有我可以应用的公式来做到这一点?
  • 我的回答仍然有效,如果像素颜色在“容忍”范围内,则使用相同的色差将其更改为“重新缩放”的新颜色。
  • 事实证明,这种方法并没有真正奏效。例如,假设我的模板颜色是红色 RGB(255,0,0)。现在模板中褪色的红色值可能类似于 RGB(255,150,150)。因此,对于绿色和蓝色像素,伪代码中的容差测试将失败。使用容差的想法是正确的方法,但我在该过程中添加了一个单独的答案。
【解决方案2】:

我能够从 vulkanino 的良好开端解决这个问题。我要做的就是将我的模板和新的 RGB 颜色转换为 HLS 格式(色调、亮度、饱和度)。然后我检查了图像中的每一位以查看色调设置是否在容差范围内,如果是,则将增量色调值应用于该位的新颜色。亮度和饱和度可以单独保留。然后我将新颜色的 HLS 格式转换回 RGB 格式,一切看起来都很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多