Numpy Image Arrays:如何有效地从RGB切换到Hex

use*_*415 3 python arrays numpy image

我一直在使用嵌套for循环将RGB图像转换为Hex值的图像数组,但对于大图像来说它太慢了.有没有人知道一个快速的方法和/或一个可以帮助我切换回RGB和HEX的库?

编辑:@ragingSloth

这就是我提出的,但它对我需要的东西来说太慢了:

def rgb_to_hex(array):
    (x, y, z) = array.shape
    for v in range(0, x):
        for u in range(0, y):
            array[v, u] = int('%02x%02x%02x' % (array[v, u, 0], array[v, u, 1], array[v, u, 2]))
Run Code Online (Sandbox Code Playgroud)

bea*_*ker 5

字符串操作可能非常慢。直接的数学方法是:

array[v, u] = ((array[v, u, 0]<<16) + (array[v, u, 1]<<8) + array[v, u, 2])
Run Code Online (Sandbox Code Playgroud)

这将 RGB 表示形式的 3 个字节组合成一个 int:

>>> A = [123, 255, 255]
>>> B = (A[0]<<16) + (A[1]<<8) + A[2]
>>> B
8126463
>>> hex(B)
'0x7bffff'
Run Code Online (Sandbox Code Playgroud)


unu*_*tbu 5

使用beaker的想法,你也可以消除双重for循环:

def tohex(array):
    array = np.asarray(array, dtype='uint32')
    return ((array[:, :, 0]<<16) + (array[:, :, 1]<<8) + array[:, :, 2])
Run Code Online (Sandbox Code Playgroud)