如何在python中生成RGB立方体矩阵?

如何在python中生成RGB立方体矩阵?,python,opencv,rgb,Python,Opencv,Rgb,我试图创建一个256*256*3大小的标准化矩阵,它表示如下RGB立方体 我在opencv中尝试了以下代码-(我将numpy作为np导入): 我得到了这个: 我也尝试过这个(没有使通道正常化): 但我有一张白色的照片 我想把这个矩阵划分成次长方体。然后求出这些长方体的平均值。之后,我将使用此信息分割给定的图像 我不知道这个问题有多容易,我找不到解决它的方法。有人能帮忙吗 谢谢对不起,我还不能理解你需要什么。假设您想要一个代表所有可能的8位RGB值的“立方体”,那么您将需要一个256 x 25

我试图创建一个256*256*3大小的标准化矩阵,它表示如下RGB立方体

我在opencv中尝试了以下代码-(我将numpy作为np导入):

我得到了这个:

我也尝试过这个(没有使通道正常化):

但我有一张白色的照片

我想把这个矩阵划分成次长方体。然后求出这些长方体的平均值。之后,我将使用此信息分割给定的图像

我不知道这个问题有多容易,我找不到解决它的方法。有人能帮忙吗


谢谢

对不起,我还不能理解你需要什么。假设您想要一个代表所有可能的8位RGB值的“立方体”,那么您将需要一个256 x 256 x 256(x3)数组。不是3个256 x 256(x3)阵列

请注意-我真的认为你不想这样做。类似这样的数据(包括子多维数据集)可以按程序生成,而无需将所有内容存储在内存中。下面的代码存储了所有约1600万个8位RGB空间值,在将其pickle到磁盘时大约需要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)

你的目标是特别的形象吗?或者你想要一个代表整个8位RGB颜色空间的矩阵?我只想要一个代表RGB立方体的矩阵!我能请你更具体一点吗?您想要一个具有所有可能的8位RGB值的256x256x256x3阵列吗?我很担心,因为在你的问题中,它说256x256不能覆盖8位RGB空间。我们可以通过循序渐进的方式实现这一点,而无需构建庞大的阵列。或者,如果你想生成与你发布的相同的图像,这是一个完全不同的问题需要解决。是的,当然!我说256x256x3是因为你可以把它分成三个通道,R,G,B,每个通道是256(8位)。所以我们有一个256x256x3矩阵!我认为这是有道理的!我还是很难理解你到底想要什么。相反,您能否在问题中解释您希望如何使用结果数据?这可能有助于让我明白这一点。
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))
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)