我注意到scipy.ndimage.zoom的结果取决于原始图像的大小。在以下代码示例中,会生成棋盘图像,然后使用ndimage.zoom进行缩放。如果一个棋盘图像块仅为2×2像素,则缩放因子似乎太大,所得图像会被裁剪。相反,如果瓦片尺寸为10x10,结果看起来不错。scipy.ndimage.zoom结果取决于图像大小
from __future__ import division
import numpy as np
from scipy import ndimage, misc
import wx
y,x = 2,2 # change tile size here
imgdata = np.zeros((y,x),dtype='uint8')
imgdata[y/2:,x/2:] = 255
imgdata[:y/2,:x/2] = 255
imgdata = np.tile(imgdata,(4,4))
imgdata = np.array((imgdata,imgdata,imgdata))
d,y,x = imgdata.shape
zoom = 200.0/y
w, h = int(x*zoom), int(y*zoom)
app = wx.App(None)
zoomed = np.ascontiguousarray(ndimage.interpolation.zoom(imgdata,[1,zoom, zoom],order=0).transpose((1,2,0)), dtype='uint8')
image = wx.ImageFromBuffer(w, h, zoomed)
image.SaveFile('zoomed.png',wx.BITMAP_TYPE_PNG)
就知道我一直在使用scipy.misc.imresize不显示此行为,但我想,以避免对额外的依赖PIL。
我做错了什么,或者这是一个缩放错误?