是“[...,:3]”在<“imgs = [plt.imread(fname)[...,:3]为文件名中的fname做”追加“的其他方式]”>

时间:2017-06-13 19:01:12

标签: python-3.x numpy matplotlib

我正在尝试将100张图像读入文件名[:100],以及每张图像 (1)作物
(2)调整为100 x 100

将所有这些图像转换为np数组。 并绘制一个蒙太奇 enter image description here

我是python的新手,如果“plt.imread(fname)[...,3]”只是附加,请告诉我。

感谢。

编辑:
我想创建100张特定图片的蒙太奇。 所以我的代码将是这样的: -

import os
import numpy as np
import matplotlib.pyplot as plt
from skimage.transform import resize

dirname = "Images/n02087046-toy_terrier"

filenames = [os.path.join(dirname, fname)
             for fname in os.listdir(dirname)
             if '.jpg' in fname]

filenames = filenames[:100]
assert(len(filenames) == 100)
# Read every filename as an RGB image
imgs = [plt.imread(fname)[...,:3] for fname in filenames]

# Crop
imgs = [utils.imcrop_tosquare(img_i) for img_i in imgs]

# Then resize the square image to 100 x 100 pixels
imgs = [resize(img_i, (100, 100)) for img_i in imgs]

imgs = np.array(imgs).astype(np.float32)

imgs.shape

plt.figure(figsize=(10, 10))

#montage is a utility function.
plt.imshow(utils.montage(imgs, saveto='dataset.png'))

所以wrt“plt.imread(fname)[...,3]”,
 它做了什么以及如何将其分解为更容易理解的方式。

感谢。

1 个答案:

答案 0 :(得分:1)

该行

imgs = [plt.imread(fname)[...,:3] for fname in filenames]

创建100个图像的列表。

plt.imread(fname)读取图像并返回一个numpy数组。您可以查看数组的形状,其类似于(n,m,3)(n,m,4),其中nm是整数。

尺寸3或4的最后一个轴表示3个颜色通道加上可能是α通道(透明度)的第四个通道。

切片[...,:3]等同于[:,:,:3],它将单词翻译成"获取前两个维度的所有值并获取第三个维度的前三个值" 。即你忽略了alpha通道,如果存在的话。这样做的原因很可能是你想在这里组合不同的图像而不是所有图像都有alpha通道。所以忽略它,你确保以后不会遇到问题。

在此示例中,您只拍摄jpeg图像。 Jpeg图像没有alpha通道,因此您实际上可以使用

imgs = [plt.imread(fname) for fname in filenames]

应该会给你相同的结果。