Как я могу преобразовать объект Frame Otaliastudios в объект OpenCV Mat? - PullRequest
0 голосов
/ 22 апреля 2019

Я использую компонент com.otaliastudios.cameraview.CameraView из библиотеки otaliastudios. Мне нужно преобразовать некоторые кадры в объекты Mat для обработки с использованием OpenCV. Как я могу преобразовать объект Frame Otaliastudios в объект OpenCV Mat?

Редактировать: класс фрейма, который я использую, находится здесь: github.com/natario1/CameraView/blob/master/cameraview/src/main/java/com/otaliastudios/cameraview/Frame.java

Как узнать, какой это формат изображения? Это имеет значение?

1 Ответ

2 голосов
/ 23 апреля 2019

Вам необходимо знать исходный формат кадра камеры вашего телефона.

Объект 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, проверьте нижнюю часть этой страницы .

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...