Обработка изображений в реальном времени в Android с использованием NDK

1

Используя телефон 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

Теги:
image-processing
real-time
android-camera

3 ответа

3
Лучший ответ

Рассматривали ли вы использование OpenCV Android-порт? Это может сделать намного больше, чем просто преобразование цвета, и это довольно быстро.

  • 0
    Вау, во время всего поиска OpenCV никогда не появлялся! (Использовал его раньше в простом C ++) Я понятия не имел, у них был порт Android. Спасибо за чаевые; Из того, что я вижу в примерах приложений, оно имеет то, что мне нужно, и обнаружение лица приближается к реальному времени! Копаем дальше в OpenCV Большое спасибо =)
  • 0
    Нет проблем! Рад, что смог помочь =) И повеселиться!
0

Вы также можете добиться успеха, оставаясь с Java. Я сделал это для imagedetectinon androangelo-приложения. Я использовал образец кода, который вы найдете здесь, выполнив поиск "decodeYUV".

Для обработки фреймов важной составляющей является размер изображения. В зависимости от устройства вы можете получить довольно большие изображения. т.е. для Галактики S2 самый маленький поддерживаемый предварительный просмотр - 640 * 480. Это большое количество пикселей.

То, что я сделал, - использовать только каждую вторую строку и каждую вторую колонку после декодирования yuvtorgb. Поэтому обработка 320 * 240 изображений работает достаточно хорошо и позволяет мне получать частоты кадров 20 кадров в секунду. (включая некоторое снижение шума, преобразование цвета из rgb в hsv и круговое движение)

Кроме того, вы должны тщательно проверить размер буфера изображения, предоставляемого функции setPreview. Если он слишком мал, сбор мусора испортит все.

В результате вы можете проверить экран калибровки приложения androangelo. Там у меня было наложение обнаруженного изображения на предварительный просмотр камеры.

0

В результате поиска Google была возвращена эта страница для реализации C YUV- > RGB565. Автор даже включил в него обертку JNI.

  • 0
    Правда, я уже нашел этот, хотя я не могу заставить его работать. Позвольте мне сначала попробовать библиотеку OpenCV, так как у них уже есть много кода манипуляции с изображениями =) В любом случае, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню