Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中二维图像的Lanczos插值_Python_Opencv_Image Processing_Python Imaging Library_Downsampling - Fatal编程技术网

Python中二维图像的Lanczos插值

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(

我尝试重新缩放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的模式错误

然后是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
中常量的名称(我认为不是)