Преобразуйте 1-D массив Numpy в 3D RGB.

Rockybilly спросил: 13 октября 2017 в 06:55 в: python

Каков наилучший способ преобразовать одномерный массив, содержащий данные rgb, в массив 3D RGB?

Если бы массив был в таком порядке, это было бы легко (однократное изменение формы)

RGB RGB RGB RGB ...

Однако мой массив находится в форме,

RRRR ... GGGG. ... BBBB

или иногда даже

GGGG .... RRRR .... BBBB (результат по-прежнему должен быть RGB, а не GRB)

Я, конечно, мог бы найти какой-то способ Python для достижения этой цели, я даже попробовал решение numpy, оно работает, но, очевидно, это плохое решение, Интересно, как лучше? , может быть, встроенная функция NumPy?

Мое решение:

for i in range(len(video_string) // 921600 - 1):        # Consecutive frames iterated over.
    frame = video_string[921600 * i: 921600 * (i + 1)]  # One frame
    array = numpy.fromstring(frame, dtype=numpy.uint8)  # Numpy array from one frame.
    r = array[:307200].reshape(480, 640)
    g = array[307200:614400].reshape(480, 640)
    b = array[614400:].reshape(480, 640)
    rgb = numpy.dstack((b, r, g))                       # Bring them together as 3rd dimention

Не позволяйте для Цикл смущает вас, у меня просто есть кадры, соединенные друг с другом в виде строки, например видео, что не является частью вопроса.

Что мне не помогло: В этом вопросе значения r, g, b уже являются двумерными массивами, поэтому это не помогает моей ситуации.

Edit1: Желаемая форма массива -

0 ответов