我尝试重新缩放2D图像(灰度)。图像大小为256x256,所需输出为224x224。像素值的范围从0到1300。
我尝试了两种方法,使用Lanczos插值对它们进行重新缩放:
首次使用PIL图像:
import numpy as np
from PIL import Image
import cv2
array = np.random.randint(0, 1300, size=(10, 256, 256))
array[0] = Image.fromarray(array[0]).resize(size=(224, 224), resample=Image.LANCZOS)导致错误消息:ValueError: image has wrong mode
然后是CV2:
array[0] = cv2.resize(array[0], dsize=(224, 224), interpolation=cv2.INTER_LANCZOS4)导致错误消息:ValueError: could not broadcast input array from shape (224,224) into shape (256,256)
如何正确地做到这一点?
发布于 2020-02-27 02:01:11
在第二种情况下,您将256x256图像的大小调整为224x224,然后将其分配回原始数组的一个切片中。这个片的大小仍然是256x256,所以NumPy不知道如何进行数据复制。
相反,创建一个大小合适的新输出数组:
array = np.random.randint(0, 1300, size=(10, 256, 256))
newarray = np.zeros((10, 224, 224))
newarray[0] = cv2.resize(array[0], dsize=(224, 224), interpolation=cv2.INTER_LANCZOS4)发布于 2020-02-27 03:44:13
在PIL部分,您有一些问题。
首先,你需要检查你创建的东西的dtype!当您像这样使用np.random()时,您将创建一个np.int64数组。因为您知道您的数据仅在1300达到最大值,因此无符号16位更可取:
array = np.random.randint(0, 1300, size=(10, 256, 256), dtype=np.uint16)其次,当您从Numpy数组创建PIL Image时,您需要在此处告诉PIL模式-灰度或亮度:
array[0] = Image.fromarray(array[0], 'L')第三,您正在尝试将新创建的PIL Image重新填充到一个Numpy数组中-不要这样做:
newVariable = Image.fromarray(...).resize()https://stackoverflow.com/questions/60416856
复制相似问题