以特定形状调整图像大小
image resize with certain shape
我想改变图像的大小,它是一个 numpy 数组。
这张照片的尺寸是(480, 640, 3),我想把它变成(55, 74, 3)。
在我看到的 python 库中搜索后,大多数调整图像大小的函数采用均值函数或对像素求和以减小尺寸。
但在我的例子中,我想做些别的,我想取第一列的第一个像素然后放下第二个像素,取第三列的第三个像素然后放下第四个像素等等在。
对于剥离第二、第四、第六……的行。
形状应该是这样的 https://imgur.com/2jPRYiy
只取棕色像素。
我怎样才能实现图片中显示的内容?这有什么功能或图书馆吗?
谢谢
您可以使用 Numpy 来做到这一点,这是所有 Python 库(OpenCV、PIL/Pillow, scikit-image, Wand, vips) 在下方使用。
所以,假设我们创建一个像这样的虚拟图像:
import numpy as np
# Synthetically create big image
big = np.arange(48, dtype=np.uint8).reshape((6,8))
看起来像这样:
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29, 30, 31],
[32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47]], dtype=uint8)
如果您现在想要每隔一行和每隔一列,请使用:
subsampled = big[0::2, 0::2]
你会在你的 subsampled
图片中看到这个:
array([[ 0, 2, 4, 6],
[16, 18, 20, 22],
[32, 34, 36, 38]], dtype=uint8)
如果你想重新应用它,再做同样的事情:
subsampledx2 = subsampled[0::2, 0::2]
你会得到这个:
array([[ 0, 4],
[32, 36]], dtype=uint8)
我不确定您如何希望每隔一行和每隔一列将 640x480 的图像缩小到 74x55,也许您打算递归应用它?
抱歉,如果您有一个具有 3 个 RGB 通道的彩色图像,您可以使用额外的冒号来显式获取所有 3 个 RGB 通道:
subsampled = big[0::2, 0::2, :]
我想改变图像的大小,它是一个 numpy 数组。 这张照片的尺寸是(480, 640, 3),我想把它变成(55, 74, 3)。
在我看到的 python 库中搜索后,大多数调整图像大小的函数采用均值函数或对像素求和以减小尺寸。
但在我的例子中,我想做些别的,我想取第一列的第一个像素然后放下第二个像素,取第三列的第三个像素然后放下第四个像素等等在。 对于剥离第二、第四、第六……的行。 形状应该是这样的 https://imgur.com/2jPRYiy 只取棕色像素。
我怎样才能实现图片中显示的内容?这有什么功能或图书馆吗? 谢谢
您可以使用 Numpy 来做到这一点,这是所有 Python 库(OpenCV、PIL/Pillow, scikit-image, Wand, vips) 在下方使用。
所以,假设我们创建一个像这样的虚拟图像:
import numpy as np
# Synthetically create big image
big = np.arange(48, dtype=np.uint8).reshape((6,8))
看起来像这样:
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29, 30, 31],
[32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47]], dtype=uint8)
如果您现在想要每隔一行和每隔一列,请使用:
subsampled = big[0::2, 0::2]
你会在你的 subsampled
图片中看到这个:
array([[ 0, 2, 4, 6],
[16, 18, 20, 22],
[32, 34, 36, 38]], dtype=uint8)
如果你想重新应用它,再做同样的事情:
subsampledx2 = subsampled[0::2, 0::2]
你会得到这个:
array([[ 0, 4],
[32, 36]], dtype=uint8)
我不确定您如何希望每隔一行和每隔一列将 640x480 的图像缩小到 74x55,也许您打算递归应用它?
抱歉,如果您有一个具有 3 个 RGB 通道的彩色图像,您可以使用额外的冒号来显式获取所有 3 个 RGB 通道:
subsampled = big[0::2, 0::2, :]