2017-02-27 96 views
1

我在python v2.7上使用matplotlib(不確定版本)來生成一個包含用於OOF2分析的圓圈的圖像。這些圓圈需要完全由相同的RGB值(#000000)組成的像素,但是當生成圓時,邊緣周圍會出現一圈「灰色」。 coll_intra = matplotlib.collections.PatchCollection(circle_intra, facecolors='black', edgecolors='black')爲什麼一個圓的matplotlib沿着圓的邊緣產生顏色漸變?

更改'黑色'和'無'之間的邊框顏色具有效果,但不會將值設置爲絕對相等。
圈與「灰色」周圍環:
Circles with rings of "grey" around them.

有沒有辦法在我的腳本來調整這一點,或者我需要蠻力它在另一個程序? (例如MSPaint)。

+0

也許我失去了一些東西,但我在圖片中看不到任何灰色圓環。這些「人工製品」也是在現場情節或保存的圖像中製作的?這看起來很像「改變」圖像(重新調整,轉換等)時的平滑操作的效果。另外檢查你的屏幕是否沒有使用某種特殊的過濾器(我只是這樣說,因爲我沒有看到任何灰色的環,它的所有黑色和白色)。 – armatita

回答

0

由於反鋸齒,圖片中可能會出現一些灰色。
必須區分matplotlib執行的抗鋸齒和圖像查看器(例如瀏覽器)中可能存在的抗鋸齒。

關於matplotlib,可以通過設置antialiased = False來關閉抗鋸齒功能。大多數藝術家和藏品確實有這個選擇。所以在這種情況下,

PatchCollection(...,antialiased=False) 

會做的伎倆。

要觀察差異,請考慮以下腳本。將antialiased設置爲True(默認設置)會輸出圖片中121種不同的灰色陰影,而將其設置爲False會使我們僅有2個(黑色和白色)。

antialiased=True
enter image description here
antialiased=False
enter image description here

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() 

(用於計算顏色的方法是改編自thisthis問題)

+0

非常感謝,這完全解決了我的問題。 – PBH

+0

很好聽。如果這回答你的問題,考慮[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),並upvoting它,否則隨時提煉你的問題。 – ImportanceOfBeingErnest