【发布时间】: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]