在python中为具有特定颜色的像素提供不同的RGB值

时间:2015-01-17 11:57:35

标签: python image-processing colors

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

This http://www.weerplaza.nl/klanten/nos/nos_radar_285.gif

1 个答案:

答案 0 :(得分:0)

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

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

接下来,您在调色板中更改该颜色,并将此新调色板写回图像。

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中搜索,这是另一回事。不要懒惰,尝试自己编码,并表明你努力解决问题,或者你会得到投票,通常没有答案。