Image Matplotlib imshow带有异常空白的相邻图像-是否有方法更正它?
我正在以与下面显示的工作代码类似的方式绘制平铺图像:Image Matplotlib imshow带有异常空白的相邻图像-是否有方法更正它?,image,plot,matplotlib,antialiasing,Image,Plot,Matplotlib,Antialiasing,我正在以与下面显示的工作代码类似的方式绘制平铺图像: import Image import matplotlib.pyplot as plt import random import numpy def r(): return random.randrange(50,200) imsize = 100 rngsize = 5 rng = range(rngsize) for i in rng: for j in rng: im = Image.new('R
import Image
import matplotlib.pyplot as plt
import random
import numpy
def r():
return random.randrange(50,200)
imsize = 100
rngsize = 5
rng = range(rngsize)
for i in rng:
for j in rng:
im = Image.new('RGB', (imsize, imsize), (r(),r(),r()))
plt.imshow(im, aspect='equal', extent=numpy.array([i, i+1, j, j+1])*imsize)
plt.xlim(-5,imsize * rngsize + 5)
plt.ylim(-5,imsize * rngsize + 5)
plt.show()
问题是:在平移和缩放时,图像边缘之间会出现与缩放无关的白色条纹,这是非常不需要的。我想这与重采样和抗锯齿有关,但我不知道如何“以正确的方式”解决它,特别是不知道matplotlib渲染引擎的确切实现细节
使用Cairo和HTML画布,您可以绘制“到像素角”或“到像素中心”(平移0.5像素),从而避免抗锯齿效果。有没有办法用Matplotlib做到这一点
谢谢你的帮助 您只需将值填充到一个较大的numpy数组中,然后在一次拍摄中绘制整个合成图像。我已经将上面的代码改编为一个最小的示例,但是对于不同大小的图像,您需要采取不同的步长
F = numpy.zeros((imsize*rngsize,imsize*rngsize,3))
for i in rng:
for j in rng:
F[i*imsize:(i+1)*imsize,
j*imsize:(j+1)*imsize, :] = (r(), r(), r())
plt.imshow(F, interpolation = 'nearest')
plt.show()
这是一个好主意,我想我可能可以用我的源图像以很快的速度做到这一点(我想mpl无论如何都必须做到这一点)。但我仍然觉得这是一种解决办法。如果我没有任何神奇的选择,我会回来接受这个。多谢各位@heltonbiker我承认这看起来像是一个黑客,但如果你想应用任何后期过滤器,最终你对合成图像有了更好的控制。此外,如果您想保存合成图像,这正是我要使用的方法(完全绕过PIL和matplotlib!)实际上,我想使用matplotlib直接作为GUI制作一个平移贴图“程序”。一个目标是在平移地图时加载和卸载分幅,始终只打印所需的图像。这可能比每次释放鼠标时生成一个新图像(这是我计划用于刷新要打印的平铺列表的事件)要轻,也可能不轻。最有可能的是,使用您的答案可以解决问题,因此在接受之前我只需再等待一段时间,以防万一。@heltonbiker您可以尝试加载一个比视口大的数组(例如每个方向上有3-4个平铺),这样您就不必在每次鼠标移动时重新加载数组。仅当“缓冲区”达到~1个标题时重新加载。您将以一些额外内存为代价获得巨大的加速。