我正在尝试使用PIL调整存储为NumPy数组的图像的大小。但它似乎也标准化了通道之间的颜色,这是我不想要的。
如果我打印原始图像和修改后的图像的min()、mean()、max(),我会得到以下结果:
0 139.3552607574856 255
0 92.91526075748563 235
0 62.96987110846718 207
0 116.63458655562165 255
0 162.5862423160817 255
0 189.97112433075552 255 因此,生成的图像看起来就像蓝色的原始绘画。
下面是我用来调整大小的代码:
def resize(img, shape):
pil_img = np2pil(img)
pil_img = pil_img.resize((shape[1], shape[0]))
np_img = pil2np(pil_img)
return np_img
def np2pil(img):
return Image.fromarray((img * 255).astype('uint8'))
def pil2np(img):
np_img = np.asarray(img)
if np_img.max() <= 1:
return (np_img * 255).astype(int)
else:
return np_img库版本:
numpy==1.19.0
Pillow==7.2.0发布于 2021-01-06 21:36:54
根据您的输出,我假设原始输入图像的类型已经是np.uint8!?如果是这样,为什么要与255相乘,并在np2pil中将类型强制转换为np.uint8?您创建了整型溢出(这解释了颜色的变化);实际的大小调整与这个问题无关!
如果我相应地修改了np2pil
def np2pil(img):
return Image.fromarray(img)一切都运行得很好。对于一些图像,我得到了以下“之前”和“之后”的min(),mean(),max()值:
0 103.00595625 255
0 91.01710625 255
0 85.2306375 255
1 103.01525 249
0 91.029375 255
0 85.249525 255由于在调整大小过程中涉及到插值,因此可能会出现细微的差异。
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.5
NumPy: 1.19.4
Pillow: 8.1.0
----------------------------------------https://stackoverflow.com/questions/62968624
复制相似问题