Вам необходимо знать исходный формат кадра камеры вашего телефона.
Объект Frame содержит поле данных byte []. Это поле, вероятно, находится в том же ImageFormat вашей камеры,Двумя наиболее распространенными форматами являются NV21 и YUV_420_888.
Формат YUV состоит из компонента, который представляет собой яркость Y, и другого компонента, который называется цветностью (УФ).
Как правило, отношение (и, следовательно, реальный размер бит / байт) этих двух компонентов определяется методами, которые уменьшают компонент цветности, потому что человеческие глаза более чувствительны к изменениям яркости, чем изменения цвета (см. ЦветностьПодвыборка ).Уменьшение выражается набором чисел, таких как 4: 2: 0.
В этом случае часть, относящаяся к цветности, составляет половину яркости.Таким образом, размер байта кадра имеет, вероятно, часть для яркости, которая равна ширине X высоты байтов, и часть цветности, которая равна ширине X (высота / 2) байта.Это означает, что размер байта сильно зависит от формата изображения, которое вы приобретаете, и вы должны изменить размер мата и выбрать CvType в соответствии с этим.
Вы должны выделить мат, который имеет тот же размервашего фрейма и поместите в него данные (из этого ответа ):
mYuv = new Mat(getFrameHeight() + getFrameHeight() / 2,
getFrameWidth(), CvType.CV_8UC1);
....
mYuv.put(0, 0, data);
И тогда у вас есть ваш мат.Если вам необходимо также преобразовать в формат RGB, проверьте нижнюю часть этой страницы .
Надеюсь, это поможет вам.