Matplotlib仅使用特定颜色保存图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matplotlib仅使用特定颜色保存图像相关的知识,希望对你有一定的参考价值。

我正在使用以下示例代码来创建图像蒙版。面罩需要具有6种颜色之一-5种给定的颜色和白色背景。但是,当我查看使用以下代码保存的图像的独特颜色时,会生成25种颜色。使用matplotlib是否可以限制保存时生成的颜色?

def rect(x,y,w,h,c):
    ax = plt.gca()
    polygon = plt.Rectangle((x,y),w,h,color=c)
    ax.add_patch(polygon)

X = np.arange(0,10,0.1)   
F = np.zeros(int(len(X)/5))
for f in range(1,5):
    Fn=np.full(int(len(X)/5), f, dtype=int)
    F = np.append(F, Fn, axis=0)

Y = np.sin(X)
plt.plot(X,Y, alpha=0.0)
plt.xlim([0, 10])
dx = X[1]-X[0]

ccc = ['#996633','blue','yellow','red','green']
cmap = colors.ListedColormap(ccc[0:len(ccc)], 'indexed')
for n, (x,y, f) in enumerate(zip(X,Y,F)):
    color = cmap(int(f))
    rect(x,0,dx,y,color)
plt.axis('off')
plt.savefig(f'5_colours_only.png', transparent = False, bbox_inches = 'tight', pad_inches = 0)

enter image description here

测试图像颜色的代码:

def get_unique_colours(img_name):
    im = pil_image.open(img_name)
    by_color = defaultdict(int)
    for pixel in im.getdata():
        by_color[pixel] += 1
    return by_color
答案

[看起来多余的颜色是由抗锯齿生成的,matplotlib.patches.Patch对象(matplotlib.patches.Patch对象继承了)支持通过bool关键字matplotlib.patches.Rectangle禁用此颜色,所以

antialising

应避免这种情况。

这也可以通过方法构造后完成

antialising

以上是关于Matplotlib仅使用特定颜色保存图像的主要内容,如果未能解决你的问题,请参考以下文章

使用numpy蒙版数组和imshow绘制分段彩色图像

仅考虑特定像素(而非完整图像)的OpenCV颜色直方图calcHist

在 python 中使用带有多处理的 matplotlib 保存多个图像(~50k)

Matplotlib - 如何使用对数刻度设置线图的颜色条

python---matplotlib

matplotlib 图例仅基于线条样式而不是颜色