我尝试创建一个大小为256 * 256 * 3的规范化矩阵,它代表这样的RGB立方体,
我在opencv中尝试了以下代码 - (我将numpy导入为np):
R = [np.true_divide(i, 256) for i in xrange(256)]
RGB_Cube = np.zeros((256, 256, 3), dtype=np.float64)
RGB_Cube[:, :, 0] = RGB_Cube[:, :, 1] = RGB_Cube[:, :, 2] = np.tile(R, (256,1))
我得到了这个:
我也试过这个(没有规范化频道):
R = [i for i in xrange(256)]
# R = np.linspace(0, 1, 256, endpoint=True)
RGB_Cube = np.zeros((256, 256, 3), dtype=np.float64)
RGB_Cube[:, :, 0] = RGB_Cube[:, :, 1] = RGB_Cube[:, :, 2] = np.tile(R, (256,1))
但我得到了一张白色图片。
我想将这个矩阵划分为子长方体。然后找出这些长方体的平均值。之后,我将使用此信息分割给定图像!
我不知道这个问题有多容易,我无法找到解决问题的方法。有人可以帮忙吗?
由于
答案 0 :(得分:1)
抱歉,我仍然无法理解您的需求。假设您想要一个代表每个可能的8位RGB值的“立方体”,您将需要一个256 x 256 x 256(x3)阵列。不是3 256 x 256(x3)阵列。
请注意 - 我真的认为你不想这样做。这样的事物(包括子立方体)的数据可以在程序上进行,而不需要将所有内容存储在内存中。下面的代码存储了大约1600万个8位RGB空间值,并且在腌制到磁盘时大约需要140MB。
无论如何这是:
import pickle
import numpy as np
# full 8-bit RGB space
bits = 8
cube_dimension = 2**bits
full_rgb_space = np.ndarray((cube_dimension, cube_dimension, cube_dimension, 3),
dtype=np.uint8)
# this is really inefficient and will take a long time.
for i in range(cube_dimension):
print(i) # just to give some feedback while it's working
for j in range(cube_dimension):
for k in range(cube_dimension):
position = color = (i, j, k)
full_rgb_space[position] = color
# save it to see what you've got.
# this gives me a 140MB file.
with open('full_rgb_space.p', 'wb') as f:
pickle.dump(full_rgb_space, f)