Обработка изображений с помощью Android Camera

Я хочу использовать onPreviewFrame для постобработки изображения перед его отображением пользователю (т.е. применить цветовой оттенок, сепию и т. д.). Насколько я понимаю, данные byte[], возвращаемые в callback, закодированы в YUV420sp. Люди декодировали это в RGB на Java или использовали NDK (собственный код)? Есть ли у кого-нибудь пример функции, которая декодирует это в RGB и как впоследствии используются значения RGB?

Спасибо.


person kevin    schedule 07.12.2010    source источник


Ответы (2)


Я нашел пример приложения, которое переводит YUV420 в RGB и отображает (вроде) гистограммы в реальном времени поверх изображения предварительного просмотра.

http://www.stanford.edu/class/ee368/Android/index.html

person anelson    schedule 06.02.2011
comment
Хорошая ссылка, спасибо. Я запускаю его в виртуальной цели Android, однако декодирование YUV420->RGB ОЧЕНЬ медленное, несмотря на то, что это просто простые сложения/умножения/фиксация. Это то, чего можно было бы ожидать в моей среде отладки ?? (Я полный нуб! :) - person Robert; 25.07.2011
comment
Да, реализация в этом коде вообще не оптимизирована. Если бы я делал подобные вещи в реальном приложении, я бы реализовал подстановку битов в нативном коде. - person anelson; 06.08.2011

Это помогает?

Parameters params = mCamera.getParameters();

param.setPreviewFormat(ImageFormat.RGB_565);

mCamera.setParameters(param);

Сначала проверьте, поддерживается ли rgb

http://developer.android.com/reference/android/hardware/Camera.Parameters.html#getPreviewFormat%28%29

а затем установите формат предварительного просмотра в rgb

http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setPreviewFormat%28int%29

person bmkay    schedule 02.04.2013