由于反锯齿,图片中可能会出现一些灰色。
必须区分matplotlib执行的抗锯齿和图像查看器(例如浏览器)中可能存在的抗锯齿。
关于matplotlib,可以通过设置antialiased = False
来关闭抗锯齿功能。大多数艺术家和藏品确实有这个选择。所以在这种情况下,
PatchCollection(...,antialiased=False)
会做的伎俩。
要观察差异,请考虑以下脚本。将antialiased
设置为True
(默认设置)会输出图片中121种不同的灰色阴影,而将其设置为False
会使我们仅有2个(黑色和白色)。
antialiased=True
:
antialiased=False
:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
from matplotlib.collections import PatchCollection
antialiased=False
N = 3
x = [1,2];y=[1,1]
radii = [0.5,.4]
patches = []
for x1, y1, r in zip(x, y, radii):
patches.append(Circle((x1, y1), r))
coll_intra = PatchCollection(patches, facecolors='black', edgecolors='black',antialiased=antialiased)
fig, ax = plt.subplots(figsize=(2,1))
ax.set_aspect("equal")
ax.axis("off")
ax.set_xlim([0,3])
ax.set_ylim([0,2])
ax.add_collection(coll_intra)
#count the number of different colors
#https://stackoverflow.com/questions/7821518/matplotlib-save-plot-to-numpy-array
#https://stackoverflow.com/questions/40433211/how-can-i-get-the-pixel-colors-in-matplotlib
fig.canvas.draw()
data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
data = data.reshape((int(len(data)/3), 3))
data = np.vstack({tuple(row) for row in data})
print len(data) # prints 121 for antialiased=True
# 2 for antialiased=False
plt.show()
(用于计算颜色的方法是改编自this和this问题)
也许我失去了一些东西,但我在图片中看不到任何灰色圆环。这些“人工制品”也是在现场情节或保存的图像中制作的?这看起来很像“改变”图像(重新调整,转换等)时的平滑操作的效果。另外检查你的屏幕是否没有使用某种特殊的过滤器(我只是这样说,因为我没有看到任何灰色的环,它的所有黑色和白色)。 – armatita