【问题标题】:Give pixels with certain color a different RGB value in python在python中给具有某种颜色的像素一个不同的RGB值
【发布时间】:2015-03-15 23:00:55
【问题描述】:

我有一个气象站点,但缺少个性化雷达。 我找到了我的国家(荷兰)的开放雷达数据,但它已经有了特定的颜色。我发现 python 可以使用图像库来操纵颜色,但我对 python 不是很好。如何让 python 逐个像素地识别雷达颜色,并将它们更改为不同的颜色?示例图片:


(来源:weerplaza.nl

【问题讨论】:

  • 您要将特定颜色的颜色更改为另一种颜色,还是将不同颜色更改为另一种不同的颜色?你能更详细地说明你想要得到的结果吗?
  • 我希望雷达的颜色变成不同的颜色。现在你有了蓝色阴影,代表降水量较低,我希望它是黄色阴影。而较高的降水,以黄色和红色为代表,仅以红色阴影表示。我不知道这是否更清楚。

标签: python image-processing colors


【解决方案1】:

您的图片类型是 GIF。它使工作变得更加困难,因为 GIF 的颜色是基于调色板的,而不是 RGB。 OpenCV 目前不支持 GIF,你最好的选择可能是Pillow

所以,根据这个SO's post,你首先需要找到调色板,然后将调色板转换为RGB,然后找到哪个颜色在哪个像素中(这可以通过使用colorpix等工具轻松完成)。

接下来,您更改调色板中的颜色并将这个新调色板写回图像。

import Image

im = Image.open("path\to\nos_radar_285.gif")

try:
    i = 0
    while 1:
        im.seek(im.tell() + 1)

        # get color of each pixel
        pal_inds = list(im.getdata())
        pal_rgbs = list(im.convert('RGB').getdata())

        # change a specific color to another color
        # eg. (190, 5, 3) to (138, 218, 47)
        pal_rgbs = [color if color != (190, 5, 3) else (138, 218, 47) for color in pal_rgbs]

        # remake a new palette
        pal_map = dict((zip(pal_inds, pal_rgbs)))
        palette = [pal_map[i] for i in sorted(pal_map)]
        flat_palette = [ind for rgb in palette for ind in rgb]

        # put the palette back to image
        im.putpalette(flat_palette)
        im.show()
        im.save('name%d' %i, 'jpg')
        i+=1
except EOFError:
    print 'done'

由于 GIF 包含多个帧,我将每个帧保存为单独的图像。要制作新的 GIF,您可以自己在 SO 中搜索是另一回事。不要偷懒,尝试自己编写代码并展示您为解决问题所做的努力,以提出要求,否则您将投反对票,通常没有答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 2014-06-11
    相关资源
    最近更新 更多