Надеюсь, это поможет вам понять, как извлечь красный, зеленый и синий каналы из 32-битных значений. Я начал с первой строки вашего массива.
im=np.array([-12763847,-12763847,-12763847,-5590160,-12039396,-12434915],dtype=np.int32)
R = ((im & 0xff).astype(np.uint8)
# array([ 57, 57, 57, 112, 28, 29], dtype=uint8)
G = ((im>>8) & 0xff).astype(np.uint8)
# array([ 61, 61, 61, 179, 75, 66], dtype=uint8)
B = ((im>>16) & 0xff).astype(np.uint8)
# array([ 61, 61, 61, 170, 72, 66], dtype=uint8)
Если эти значения выглядят правильно, вы сможете объединить их в цветное изображение с:
img = cv2.merge((B,G,R))
с учетом того, что OpenCV использует BGR
упорядочение каналов, а не более обычный RGB
.
Порядок следования байтов в вашем 32-битном числе может отличаться от того, что я предполагаю выше. Самый простой способ проверить это - поставить перед камерой красную карточку и посмотреть, что из этого выйдет, затем зеленую, а затем синюю. Четыре канала (R, G, B, A) должны быть заданы следующим образом, но это может быть вопросом эксперимента:
(im ) & 0xff
(im>>8 ) & 0xff
(im>>16) & 0xff
(im>>24) & 0xff