【问题标题】:combine 3d arrays into a 4d array in numpy在 numpy 中将 3d 数组组合成 4d 数组
【发布时间】:2019-11-10 09:25:40
【问题描述】:

我有 3 张相同大小的图像,我使用 matplotlib.image.imread 读取每张图像,它返回一个 3D numpy 数组。

(Height, Width, ChannelsNumber) # ChannelsNumber = 3 for RGB

现在,我想将 3 个图像合并成一个 4D numpy 数组,如下所示:

(Height, Width, ChannelsNumber, NumberOfImages)

意思是,(X,Y) 位置的第 3 维数组将不再包含像素 (X,Y) 的 RGB 值,而是包含 3 个数组,每个通道一个 (),其中每个数组将包含 3 个 R、G、r B 值(3张图片)

  • 位置X,Y,0 的数组将包含像素X,Y 处图像1,2,3 的所有RED 值
  • 位置X,Y,1 的数组将包含像素X,Y 处图像1、2、3 的所有绿色值
  • 位置X,Y,2 的数组将包含像素X,Y 处图像1、2、3 的所有蓝色值

例如:

(10,15,0) 将是一个数组,其中包含 Pixel (10,15) 的所有图像的所有 RED 值

这是我尝试过的:

import numpy as np
import os
import matplotlib.image as mpimg

img1 = mpimg.imread('./image1.jpg')
img2 = mpimg.imread('./image2.jpg')
img3 = mpimg.imread('./image3.jpg')

x = np.dstack((img1, img2, img3))

这将返回一个 3D 数组,其中第 3 维是一个包含此格式图像的 RGB 值的数组:

[R-img1, B-img1, G-img1, R-img2, B-img2, G-img2, R-img3, B-img3, G-img3]

我想要的是:

[ 
    [R-img1, R-img2, R-img3,],
    [R-img1, B-img2, -img3,],
    [B-img1, B-img2, B-img3,]
]

谢谢!

【问题讨论】:

  • .stack 沿轴=-1
  • @Scott 谢谢你.. 把这个作为答案,以便我将其标记为已回答..
  • x = np.vstack((img1, img2, img3))
  • @Scott 我如何反转,做相反的事情,输出到输入?
  • 第一个 img 是最后一个索引的第 0 个元素。 img1 = stacked_imgs[...,0]

标签: python arrays numpy


【解决方案1】:

import numpy as np
import os
import matplotlib.image as mpimg

img1 = mpimg.imread('1.png')
img2 = mpimg.imread('2.png')
img3 = mpimg.imread('1.png')

print(img1.shape)
print(img2.shape)
print(img3.shape)
x = np.vstack((img1, img2, img3))

垂直顺序堆叠数组

【讨论】:

    【解决方案2】:

    答案是Scott评论的那个

    x = np.stack((img1, img2, img3), axis = -1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 2021-08-06
      • 2021-10-14
      • 1970-01-01
      • 2019-03-02
      • 2019-01-08
      • 1970-01-01
      相关资源
      最近更新 更多