由於反鋸齒,圖片中可能會出現一些灰色。
必須區分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