У меня есть камера, выводящая формат BayerRG12Packed, что означает, что каждое значение составляет 12 бит, а они не дополняются до 16 бит.
Я пытаюсь найти простое решение этой проблемы (почти как если бы я мог использовать uint12 dtype), я пробовал приведенный ниже код, но, похоже, он не выдает правильный вывод.
Я затрудняюсь понять этот процесс ..
Для получения дополнительной информации о Тип данных здесь ссылка на do c относительно этого (это просто другой порядок пикселей, чем у фильтра RG): Формат BayerGB12Packed
Данные, поступающие из буфера, не подписаны.
def read_uint12(data_chunk):
data = np.frombuffer(data_chunk, dtype=np.uint8)
fst_uint8, mid_uint8, lst_uint8 = np.reshape(data, (data.shape[0] // 3, 3)).astype(np.uint16).T
fst_uint12 = (fst_uint8 << 4) + (mid_uint8 >> 4)
snd_uint12 = ((mid_uint8 % 16) << 8) + lst_uint8
return np.reshape(np.concatenate((fst_uint12[:, None], snd_uint12[:, None]), axis=1), 2 * fst_uint12.shape[0])