gpt4 book ai didi

Python - 将图像读入图像矩阵

转载 作者:太空狗 更新时间:2023-10-30 01:58:10 24 4
gpt4 key购买 nike

我正在尝试将多个 rgb 图像读取到一个矩阵中,这样矩阵尺寸为 (image_size, image_size, index) 例如data[:,:,1] 应该检索第一张图像。

data = np.zeros((image_dim, image_dim, numImages), dtype=np.float64)
for fname in os.listdir('images/sample_images/'):
name='....'
image=mpimg.imread(name)
data = np.append(data, image)
return data

图像.形状 = (512, 512, 3)数据.shape = (512, 512, 100)

除了 np.append 给我留下一个空数据数组这一事实之外,还有另一种方法可以将图像数组值附加到大数据矩阵吗?

提前致谢

最佳答案

Falko 的帖子无疑是规范的方式。但是,如果我可以建议一个更 numpy/Pythonic 的方法来做到这一点,我会让第一个维度是你想要的图像的索引,而第二个和第三个维度是行和列图像,可选的第四维是您想要的颜色 channel 。因此,假设您的图像尺寸为 M x N 并且您有 K 图像,您将创建一个矩阵为 K x M x N对于彩色图像,长或 K x M x N x 3 长。

因此,根据您当前的代码,numpy 中的一个简单的单行代码可能是这样的:

data = np.array([mpimg.imread(name) for name in os.listdir('images/sample_images/')], dtype=np.float64)

因此,如果您想要访问第 ith 个图像,您只需执行 data[i]。这将独立图像是 RGB 还是灰度...所以通过执行 data[i],您将获得 RGB 图像或灰度图像,具体取决于关于您决定使用什么来打包阵列。但是,您需要确保所有图像都是一致的……也就是说,它们都是彩色的或都是灰度的。

但是,为了向您展示这是有效的,让我们尝试使用 5 x 5 x 3“RGB”图像,其中每个图像从 0 开始增加到 K-1 其中 K 在这种情况下将为 10:

data = np.array([i*np.ones((5,5,3)) for i in range(10)], dtype=np.float64)

让我们看一个示例运行(在 IPython 中):

In [26]: data = np.array([i*np.ones((5,5,3)) for i in range(10)], dtype=np.float64)

In [27]: data.shape
Out[27]: (10, 5, 5, 3)

In [28]: img = data[0]

In [29]: img
Out[29]:
array([[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],

[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],

[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],

[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],

[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]]])

In [30]: img.shape
Out[30]: (5, 5, 3)

In [31]: img = data[7]

In [32]: img
Out[32]:
array([[[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.]],

[[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.]],

[[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.]],

[[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.]],

[[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.],
[ 7., 7., 7.]]])

In [33]: img.shape
Out[33]: (5, 5, 3)

在上面的示例运行中,我创建了示例数据数组,它是我们预期的 10 x 5 x 5 x 3。我们有 10 个 5 x 5 x 3 矩阵。接下来,我提取出第一个“RGB”图像,如我们所料,它全为 0,大小为 5 x 5 x 3。我还提取了第八个切片,我们都得到了预期的 7,大小为 5 x 5 x 3

显然,选择您认为最好的答案,但我个人会选择上述路线,因为索引到您的数组以获取正确的图像更简单 - 您让维度广播为您完成工作。

关于Python - 将图像读入图像矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32077425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com