Python中二维图像的Lanczos插值
我尝试重新缩放2D图像(灰度)。 图像大小为256x256,所需输出为224x224。 像素值的范围从0到1300 我尝试了两种方法来使用Lanczos插值重新缩放它们: 首先使用PIL图像:Python中二维图像的Lanczos插值,python,opencv,image-processing,python-imaging-library,downsampling,Python,Opencv,Image Processing,Python Imaging Library,Downsampling,我尝试重新缩放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(
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的模式错误
然后是CV2:
array[0] = cv2.resize(array[0], dsize=(224, 224), interpolation=cv2.INTER_LANCZOS4)
导致错误消息:ValueError:无法将输入数组从形状(224224)广播到形状(256256)
如何正确执行?在第二种情况下,将256x256图像的大小调整为224x224,然后将其分配回原始阵列的一个切片中。这个切片的大小仍然是256x256,所以NumPy不知道如何进行数据复制 而是创建一个大小正确的新输出数组:
array=np.random.randint(01300,size=(10256256))
newarray=np.zero((10224224))
newarray[0]=cv2.resize(数组[0],dsize=(224224,224),插值=cv2.interlanczos4)
在第二种情况下,将256x256图像的大小调整为224x224,然后将其分配回原始数组的一个切片中。这个切片的大小仍然是256x256,所以NumPy不知道如何进行数据复制
而是创建一个大小正确的新输出数组:
array=np.random.randint(01300,size=(10256256))
newarray=np.zero((10224224))
newarray[0]=cv2.resize(数组[0],dsize=(224224,224),插值=cv2.interlanczos4)
在PIL部分,您有一些问题
首先,你需要检查你创建的东西的dtype
!当您像这样使用np.random()
时,将创建一个np.int64
数组。正如您所知,数据的最大值仅为1300,最好使用无符号16位:
array = np.random.randint(0, 1300, size=(10, 256, 256), dtype=np.uint16)
其次,当您从Numpy数组创建PIL图像时,需要在此处告诉PIL模式-灰度或亮度:
array[0] = Image.fromarray(array[0], 'L')
第三,您试图将新创建的PIL图像填充回Numpy数组中-不要这样做:
newVariable = Image.fromarray(...).resize()
在PIL部分,您有一些问题 首先,你需要检查你创建的东西的
dtype
!当您像这样使用np.random()
时,将创建一个np.int64
数组。正如您所知,数据的最大值仅为1300,最好使用无符号16位:
array = np.random.randint(0, 1300, size=(10, 256, 256), dtype=np.uint16)
其次,当您从Numpy数组创建PIL图像时,需要在此处告诉PIL模式-灰度或亮度:
array[0] = Image.fromarray(array[0], 'L')
第三,您试图将新创建的PIL图像填充回Numpy数组中-不要这样做:
newVariable = Image.fromarray(...).resize()
现在它应该是一个最小的可重复的例子:)只是一个怀疑(自从我使用
opencv
以来已经有一段时间了)。当您使用python
时,cv2
中的常量表示方式与它的本机c
略有不同。我会仔细检查-这是否真的是python
中常量的名称(我认为不是),现在它应该是一个最小的可复制示例:)只是一个怀疑(自从我使用opencv
以来已经有一段时间了)。当您使用python
时,cv2
中的常量表示方式与它的本机c
略有不同。我会仔细检查-这是否真的是python
中常量的名称(我认为不是)