Используя телефон Android (2.3.3), я могу использовать камеру для получения предварительного просмотра с помощью метода onPreviewFrame(byte[] data, Camera camera)
, чтобы получить изображение YUV.
Для некоторой обработки изображений мне нужно преобразовать эти данные в RGB-изображение и показать его на устройстве. Используя базовый метод java/android, это работает с ужасной скоростью менее 5 кадров в секунду...
Теперь, используя NDK, я хочу ускорить процесс. Проблема в следующем: как преобразовать массив YUV в массив RGB в C? И есть ли способ показать его (используя OpenGL, возможно?) В собственном коде? В реальном времени должно быть возможно (демонстрации Qualcomm AR показали нам это).
Я не могу использовать setTargetDisplay
и накладывать на него наложение!
Я знаю Java, недавно начал работу с Android SDK и имел нулевой опыт в C
Рассматривали ли вы использование OpenCV Android-порт? Это может сделать намного больше, чем просто преобразование цвета, и это довольно быстро.
Вы также можете добиться успеха, оставаясь с Java. Я сделал это для imagedetectinon androangelo-приложения. Я использовал образец кода, который вы найдете здесь, выполнив поиск "decodeYUV".
Для обработки фреймов важной составляющей является размер изображения. В зависимости от устройства вы можете получить довольно большие изображения. т.е. для Галактики S2 самый маленький поддерживаемый предварительный просмотр - 640 * 480. Это большое количество пикселей.
То, что я сделал, - использовать только каждую вторую строку и каждую вторую колонку после декодирования yuvtorgb. Поэтому обработка 320 * 240 изображений работает достаточно хорошо и позволяет мне получать частоты кадров 20 кадров в секунду. (включая некоторое снижение шума, преобразование цвета из rgb в hsv и круговое движение)
Кроме того, вы должны тщательно проверить размер буфера изображения, предоставляемого функции setPreview. Если он слишком мал, сбор мусора испортит все.
В результате вы можете проверить экран калибровки приложения androangelo. Там у меня было наложение обнаруженного изображения на предварительный просмотр камеры.
В результате поиска Google была возвращена эта страница для реализации C YUV- > RGB565. Автор даже включил в него обертку JNI.