gpt4 book ai didi

python - 灰度级与 scipy.misc.imresize() 不一样

转载 作者:行者123 更新时间:2023-11-28 21:49:40 25 4
gpt4 key购买 nike

我有一张图片,我想调整它的大小(高档)。我不想在我的图像中引入额外的灰度级。这就是为什么我使用最近邻插值如下:

  scipy.misc.imresize(image, image2.shape, interp="nearest",mode="L")

图像中的原始灰度级:

[ 0  2  4  5  8  9 10 11 12 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30
31 32 35 36 37 38 41 43 45 46 47 51]

插值后:

[  0  10  20  25  40  45  50  55  60  70  75  80  85  90  95 100 105 110
115 125 130 135 140 145 150 155 160 175 180 185 190 205 215 225 230 235
255]

我也试过改变模式,但没有用。我不知道如何修复它。

最佳答案

imresize 使用 PIL 或 Pillow 来完成实际工作。正是转换为模式“L”的 PIL 图像触发了数据值的重新缩放。如果输入数据类型不是 8 位,则缩放值以填充 8 位范围。

避免这种情况的一种方法是确保输入数组的数据类型为 numpy.uint8。然后这些值不会重新调整。

例如,这是一个 64 位值的 3x4 图像(即数组的数据类型是 numpy.int64):

In [132]: img
Out[132]:
array([[ 1, 1, 2, 17],
[ 4, 3, 1, 2],
[ 1, 5, 4, 2]])

以下是使用 mode='L' 将该数组传递给 imresize 时发生的情况:

In [133]: imresize(img, (6, 8), interp='nearest', mode='L')
Out[133]:
array([[ 0, 0, 0, 0, 16, 16, 255, 255],
[ 0, 0, 0, 0, 16, 16, 255, 255],
[ 48, 48, 32, 32, 0, 0, 16, 16],
[ 48, 48, 32, 32, 0, 0, 16, 16],
[ 0, 0, 64, 64, 48, 48, 16, 16],
[ 0, 0, 64, 64, 48, 48, 16, 16]], dtype=uint8)

如果输入首先转换为 np.uint8,则值不会重新缩放:

In [134]: imresize(img.astype(np.uint8), (6, 8), interp='nearest', mode='L')
Out[134]:
array([[ 1, 1, 1, 1, 2, 2, 17, 17],
[ 1, 1, 1, 1, 2, 2, 17, 17],
[ 4, 4, 3, 3, 1, 1, 2, 2],
[ 4, 4, 3, 3, 1, 1, 2, 2],
[ 1, 1, 5, 5, 4, 4, 2, 2],
[ 1, 1, 5, 5, 4, 4, 2, 2]], dtype=uint8)

关于python - 灰度级与 scipy.misc.imresize() 不一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33093317/

25 4 0
文章推荐: python - 使用 Selenium for Python 从 中迭代读取特定元素