Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image Matplotlib imshow带有异常空白的相邻图像-是否有方法更正它?_Image_Plot_Matplotlib_Antialiasing - Fatal编程技术网

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个标题时重新加载。您将以一些额外内存为代价获得巨大的加速。