图像矩阵读入python_Python-将图像读入图像矩阵

本文介绍了如何在Python中使用numpy以更高效、更Pythonic的方式将图像读入为矩阵。通过创建一个数组,使第一维代表图像索引,第二、三维分别代表图像的行和列,这种方法可以轻松地处理RGB或多幅图像。示例代码展示了如何构建和操作这个矩阵,以方便地访问和处理图像数据。
摘要由CSDN通过智能技术生成

法尔科的职位无疑是做这件事的典范。但是,如果我可以建议一种更numpy/Pythonic的方法来实现这一点,我会让第一个维度成为您想要的图像的索引,而第二个和第三个维度是图像的行和列,并且可以选择第四个维度作为您想要的颜色通道。因此,假设您的图像具有维度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”图像,它的大小是5 x 5 x 3,和我们预期的一样都是0。我还提取了第八个切片,我们都得到了预期的7s,大小为5 x 5 x 3。

显然,选择你认为最好的答案,但我个人会按照上面的路线,因为索引到数组中以获取正确的图像更简单-你让dimension broadcasting为你做这项工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值