Я застрял в течение нескольких часов, надеюсь, вы мне поможете.
Я работаю над интеграцией камеры в приложение и хотел бы использовать RAW-данные, которые можно извлечь.присваивая значение ' bayer-mipi-10grbg ' параметру ' picture-format '.С моим Redmi Note 6 в обратном вызове OnPictureTaken я получаю байтовый массив (15 482 880 байт).
Мне еще не удалось использовать этот байтовый массив.
Я прочитал, что это было необходимодля удаления данных с целью получения пригодного изображения RGB.Поэтому я выбрал OpenCv, чтобы сделать мою жизнь проще, см. Следующий фрагмент кода:
public void OnPictureTaken(byte[] data, Camera camera)
{
var height = 4032;
var width = 3024;
var mBayer = new Mat(width, height, CvType.Cv16u);
var mRgb = new Mat();
mBayer.Put(0, 0, /* data' */);
Imgproc.CvtColor(mBayer, mRgb, Imgproc.COLORBayerGR2BGR);
Imgcodecs.Imwrite($"{_galleryFolder}/{DateTime.Now.ToString("yyMMddhhmmss")}", mRgb);
}
Моя проблема в том, что для построения матрицы Cv16u я не могу дать ей массив байтов, если яправильно понимать, что нужен массив шорт.
Мой вопрос: какое преобразование я должен применить к моему байтовому массиву, чтобы получить действительный массив шорт?
Редактировать: Шортымассив, очевидно, не будет простой копией массива байтов, например, я представляю, что первые x байтов соответствуют первому значению массива шорт (это пример).Об этом преобразовании я не знаю.
Edit2: 4032x3024 - это размер, который я получаю из параметра raw-size.У меня явно возникают трудности с установлением связи между этим размером и размером получаемого массива байтов.Я загрузил файл, который содержит полученный массив байтов (сохранен как есть, без обработки): https://ufile.io/gsis9