2017-02-27 46 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