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

Give pixels with certain color a different RGB value in python

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


(来源:weerplaza.nl

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

所以,根据这个SO's post you first need to find the palette, then convert the palette to RGB and find which color is in which pixel (which can be done easily by using some tools like 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里面搜索就另当别论了。不要偷懒,尝试自己编写代码并展示你解决问题的努力是为了提问,否则你会被否决并且通常没有答案。