如何将图像数组转换为 Python 中的二维数组
How can I convert an array of images to a 2D array in Python
我有一个 numpy 形状的图像数组:
(50000, 32, 32, 3)
50000
为图片数量
32, 32
是高和宽
3
是范围为0-1
的RGB值
我想将其转换为二维形状:
(50000, 1024)
这里我将 50000 张图片排成一行,
RGB 值将被转换为十六进制值
我经历了很多到堆栈溢出的转换过程,并且找到了一些。
我知道,如果我的数组是一个具有已转换值的 3D 数组,我可以轻松地使用 reshape()
函数将其转换为 2D。
现在我正在搜索的是转换 RGB 值和重塑数组的最简单方法
这是否可以在 1 行或两行中实现,还是我应该使用外部函数?
首先使用您喜欢的任何函数将最后一个维度中的 RGB 值转换为 HEX 值。这 SO answer 可能会有所帮助。
Reshape 然后适用于任意数量的维度:
import numpy as np
def rgb2hex(r, g, b):
return '#%02x%02x%02x' % (r, g, b)
vfunc = np.vectorize(rgb2hex)
a = (np.random.uniform(0,1,(10,5,5,3))*255).astype(int)
c = vfunc(a[:,:,:,0], a[:,:,:,1], a[:,:,:,2])
c.reshape((10,25))
下面将RGB值组合成一个值
x=np.zeros((100,32,32,3))
x[:,:,:,0] = np.trunc(x[:,:,:,0]) + np.trunc(x[:,:,:,1] *256) + np.trunc(x[:,:,:,2] *65535)
y=x[:,:,:,0]
print(y.shape)
y 的最终形状:(100, 32, 32)
接下来可以对y使用reshape函数。
为此,您首先需要重塑 ndarray
(np.reshape
):
a = np.random.randint(1,10,(500, 32, 32, 3))
a_r = np.reshape(a, (500, 1024, 3))
print(a_r.shape)
# (500, 1024, 3)
现在,为了按照您的建议将最后一个维度的 RGB
值转换为十六进制表示,您可以定义一个函数,用一个简单的 returns 三个值的十六进制表示字符串格式:
def rgb_to_hex(x):
return '#{:02X}{:02X}{:02X}'.format(*rgb.reshape(3))
为了沿最后一个轴的所有行应用转换,您可以使用 np.apply_along_axis
:
a_new = np.apply_along_axis(rgb2hex, axis=-1, arr=a_r).shape
print(a_new.shape)
# (500, 1024)
我有一个 numpy 形状的图像数组:
(50000, 32, 32, 3)
50000
为图片数量32, 32
是高和宽3
是范围为0-1
的RGB值
我想将其转换为二维形状:
(50000, 1024)
这里我将 50000 张图片排成一行,
RGB 值将被转换为十六进制值
我经历了很多到堆栈溢出的转换过程,并且找到了一些。
我知道,如果我的数组是一个具有已转换值的 3D 数组,我可以轻松地使用 reshape()
函数将其转换为 2D。
现在我正在搜索的是转换 RGB 值和重塑数组的最简单方法
这是否可以在 1 行或两行中实现,还是我应该使用外部函数?
首先使用您喜欢的任何函数将最后一个维度中的 RGB 值转换为 HEX 值。这 SO answer 可能会有所帮助。
Reshape 然后适用于任意数量的维度:
import numpy as np
def rgb2hex(r, g, b):
return '#%02x%02x%02x' % (r, g, b)
vfunc = np.vectorize(rgb2hex)
a = (np.random.uniform(0,1,(10,5,5,3))*255).astype(int)
c = vfunc(a[:,:,:,0], a[:,:,:,1], a[:,:,:,2])
c.reshape((10,25))
下面将RGB值组合成一个值
x=np.zeros((100,32,32,3))
x[:,:,:,0] = np.trunc(x[:,:,:,0]) + np.trunc(x[:,:,:,1] *256) + np.trunc(x[:,:,:,2] *65535)
y=x[:,:,:,0]
print(y.shape)
y 的最终形状:(100, 32, 32)
接下来可以对y使用reshape函数。
为此,您首先需要重塑 ndarray
(np.reshape
):
a = np.random.randint(1,10,(500, 32, 32, 3))
a_r = np.reshape(a, (500, 1024, 3))
print(a_r.shape)
# (500, 1024, 3)
现在,为了按照您的建议将最后一个维度的 RGB
值转换为十六进制表示,您可以定义一个函数,用一个简单的 returns 三个值的十六进制表示字符串格式:
def rgb_to_hex(x):
return '#{:02X}{:02X}{:02X}'.format(*rgb.reshape(3))
为了沿最后一个轴的所有行应用转换,您可以使用 np.apply_along_axis
:
a_new = np.apply_along_axis(rgb2hex, axis=-1, arr=a_r).shape
print(a_new.shape)
# (500, 1024)