如何更换图像的颜色?

时间:2011-03-10 19:21:26

标签: java image-processing computer-vision image-manipulation rgb

我想要替换图像的颜色。例如,将所有蓝色变为红色,形状没有任何变形。当我尝试这个时,我可以通过迭代每个像素来交换颜色,但是交换区域的形状变成扁平形状。

example1输入:http://www.tutorialwiz.com/tutorials/changing_color/images/original.jpg
example1输出:http://www.tutorialwiz.com/tutorials/changing_color/images/3.jpg

example2:输入输出:http://www.digital-photography-school.com/wp-content/uploads/2009/07/before-after.jpg

3 个答案:

答案 0 :(得分:7)

通常的方法是使用RGBImageFilter。有关如何使用此类过滤器的信息,请参阅FilteredImageSource的文档。

答案 1 :(得分:1)

您要问的问题是严格的颜色替换会修改图像的形状。您需要做的是获得有关形状的一些信息。即沿边界查找边界和阴影。我给你的建议是:

  1. 使用边缘检测来分离blob
  2. 找到符合您要求的blob:即具有[color] ish的容忍可能性。
  3. 识别已应用的blob和过滤器
  4. 重新着色斑点并重新着色。
  5. IMO:这是您获得所需结果的唯一方式。

    一些注意事项:找到斑点可能需要进行一些测试,以确定您对斑点和形状的容忍程度。 [连接区域]。

    另一件事:阴影和相对着色将要求你对所需的颜色有所偏差。

答案 2 :(得分:0)

我不完全理解这个问题。 但是根据给出的例子,我看到将蓝色变为红色的过程失败了。它变成了灰色而不是变红。灰色是你的意思吗?

如果是这样,它看起来像颜色通道错误。 要将蓝色更改为红色,我们必须将(0,255,0)更改为(255,0,0)

我不确定这是不是问题,也许代码片段可以帮助评估。确定什么是真正的问题。