我尝试重新缩放2D图像(灰度)。
图像大小为256x256,所需的输出为224x224。
像素值的范围是0到1300。
我尝试了2种方法来使用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)
如何正确做?
最佳答案
在第二种情况下,您将256x256图像的大小调整为224x224,然后将其分配回原始数组的一部分。该 slice 的大小仍为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)