【问题标题】:Iterate through the images and store each image as a list item遍历图像并将每个图像存储为列表项
【发布时间】:2020-02-10 11:19:03
【问题描述】:

您好,我在一个文件夹中有多个图像,我正在遍历它们并将它们转换为 20x20 块。对于图像中的每个块,我正在计算平均值,并且这是针对每个图像完成的。我想要列表形式的结果,这意味着如果我有 6 个图像,则应该有 6 个列表项,并且对于每个列表项,应该有一个 20x20 数组,其中包含所有块的平均值。

img = [cv2.imread(file,0) for file in glob.glob("resized/*.jpg")]
X=[]
for im in img:
    arr = np.asarray(im)
    arr = np.split(arr, 20)
    arr = np.array([np.split(x, 20, 1) for x in arr])
    mat = [arr[i][j].mean() for i in range(20) for j in range(20)]
    X.append(mat)

这是所需的输出。

[[0,0.1,....,],[0,0.1,....,],[0,0.1,....,],[0,0.1,....,],[0,0.1,....,],[0,0.1,....,]]. Each item should be 400 values.

但现在我只得到 400 个值。

[[0.0,
  0.0,
  0.0,
  0.0,
  0.0,
 ....
  3.99,
  2.16,
  12.23,
  0.0,
  0.0,
  5.07,
  7.65,
 ....
  0.0,
  0.0,
  0.0]]

【问题讨论】:

    标签: python arrays numpy opencv image-processing


    【解决方案1】:

    您的列表推导返回单个值的列表。要创建二维列表,请尝试:

    mat = [[arr[i][j].mean() for i in range(20)] for j in range(20)]
    

    【讨论】:

    • 我想要[[a11,a12,..,a120,a21,..a220,...a400400],[b11,b12,..,b120,b21,..b220,...b400400], [c11,c12,..,c120,c21,..c220,...c400400]] 形式的结果,其中 a,b,c 是文件夹“调整大小”中的图像,a11,b11,c11 是图像 a,b 中的块, c分别
    【解决方案2】:

    我拥有的当前代码正在按照我的意愿进行所需的输出。我以前没有注意到它是我的错。该代码生成 6 个列表项,每个列表项的长度等于 400,这是一个图像中的块数。因此,我们有一个长度为 6 的二维列表,其中每个列表项是每个块的平均值列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-19
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多