使用图像处理将每个形状的颜色更改为唯一的颜色

时间:2019-08-08 04:38:29

标签: python-3.x python-imaging-library

我有一个png,上面有代表虚构地理位置的多种形状。我希望为这些位置中的每个位置提供不同的颜色,以使其更易于处理。

我知道如何将x颜色更改为y颜色,但是我不知道如何设置代码以使其更改当前形状的颜色然后继续前进。

Future

预期结果是我可以输入这样的图像:

https://cdn.discordapp.com/attachments/404701706820124676/608881289080209408/Asset_2.png

并为每种形状提供独特的颜色。

1 个答案:

答案 0 :(得分:0)

您实际上是在寻找受边界限制的区域的“洪水填充” ,您可以使用PIL / Pillow的ImageDraw.floodfill()方法来做到这一点:

#!/usr/bin/env python3

from PIL import Image, ImageDraw
import numpy as np

# Open the image
im = Image.open('map.png').convert('RGB')

# Make all pixels in top-left country into magenta (255,0,255)
ImageDraw.floodfill(im,xy=(40,40),value=(255,0,255),thresh=50)

# Make all pixels in bottom-right country into yellow (255,255,0)
ImageDraw.floodfill(im,xy=(100,100),value=(255,255,0),thresh=50)

这给你这个:

enter image description here

我不确定“移至下一个区域” 是什么意思,但是我想您可以将洪水填充命令放在一个循环中,并继续获取第一个白色像素的位置作为洪水填充的种子,直到不再剩下无色(白色)像素为止。为此,我将PIL图像转换为Numpy Array并找到白色像素的坐标,如下所示:

# Convert PIL Image to Numpy Array
n = np.array(im)

# Get X,Y coordinates of all remaining white pixels
y, x = np.nonzero(np.all(n==[255,255,255],axis=2))