我用它来控制分形绘图程序的色阶。我想知道是否有办法消除r,g,b变量并将结果插入到img ndarray中?我已经摆弄了添加np.expand_dims的新维度,但形状变成(5,5,1)而不是(5,5,3),就像我需要的那样。重塑它似乎是一场噩梦。
import numpy as np
#img is an array of values to be converted into RGB from another process
img = np.arange(25)
img = np.reshape(img,(5,5))
#simplified example of original process
r = img*2
g = img*3
b = img*4
#creating new array to accomidate the higher dimension
img = np.array([r,g,b], dtype = np.uint8)
#no longer needed
del r,g,b
#rolling axis for PIL Image.fromarray compatibily
img = np.rollaxis(img,0,3)
img = np.rollaxis(img,0,2)
print(img)
答案 0 :(得分:0)
img
以(5,5)数组开头。这是25个像素中每个像素的一个值。
加入r,g,b
数组后的新数组是(3,5,5)。
第一个rollaxis将其更改为(5,5,3)数组。
np.stack([r,g,b], axis=2)
会做同样的事情。
第二个rollaxis交换前两个维度,实际上是转置原始图像。 (实际上两个rollaxis
都可以替换为img.transpose()
。
即使您使用expand_dims
,您仍然会创建一个新数组(尽管它与原始数据共享数据缓冲区)。但是(5,5,1)仍然没有空间来存储3个颜色值。原件有25个值,新图像有75个。你必须以某种方式制作一个新的数组。
为了更好地理解rollaxis
部分,我建议使用像
arr = np.arange(24).reshape(3,2,4)
所有3个维度的不同尺寸可以更容易地看到形状的变化。