Чтение изображений RGB с помощью ImageReaderAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Чтение изображений RGB с помощью ImageReader

Сообщение Anonymous »

Я пытаюсь использовать ImageReader для получения изображений RGB с камеры. Я использую API Camera2 из Android 5.0 «L» на Nexus 5 с предварительной версией для разработчиков. Обратите внимание, что я не спрашиваю, как преобразовать YUV в RGB — я пытаюсь получить RGB напрямую из ImageReader. Для тех, кто хочет знать, как конвертировать YUV в RGB, не стесняйтесь проконсультироваться с другим вопросом, например. Преобразуйте Android camera2 api YUV_420_888 в RGB.
У меня уже есть SurfaceView, настроенный для изображений RGB, который работает нормально, и я считаю, что аппаратное обеспечение камеры создает данные RGB (потому что все настройки отображения тонов и усиления цвета в Android указаны для работы с каналами RGB).
Я могу получить изображения YUV_420_888 из ImageReader, создав ImageReader следующим образом:

Код: Выделить всё

imageReader = ImageReader.newInstance(W, H, ImageFormat.YUV_420_888, 4);
а затем конвертируем изображения YUV в RGB. Однако это приводит как к нежелательной ошибке квантования (поскольку моему приложению требуются изображения RGB), так и к ненужному времени обработки.
Однако, когда я пытаюсь создать программу чтения изображений таким образом:

Код: Выделить всё

imageReader = ImageReader.newInstance(W, H, PixelFormat.RGB_888, 4);
захват изображения завершается неудачно, за следующим исключением:

Код: Выделить всё

java.lang.UnsupportedOperationException: The producer output buffer format 0x22 doesn't match the ImageReader's configured buffer format 0x3.
at android.media.ImageReader.nativeImageSetup(Native Method)
at android.media.ImageReader.acquireNextSurfaceImage(ImageReader.java:293)
at android.media.ImageReader.acquireNextImage(ImageReader.java:339)
at android.media.ImageReader.acquireLatestImage(ImageReader.java:243)
at 
Я запутался на двух фронтах. Во-первых, упомянутый выходной формат 0x22 отсутствует ни в PixelFormat, ни в ImageFormat. Кажется, это какой-то недокументированный необработанный режим, но я не могу использовать ImageReader.newInstance(W, H, 0x22, 4) для его захвата (я получаю java.lang.UnsupportedOperationException: указан неверный формат 34< /код>). Мне бы хотелось сделать снимок в необработанном формате, но я не могу убедить ImageFormat принять его (а другой необработанный формат ImageFormat.RAW_SENSOR по какой-то причине невероятно медленный).
Во-вторых, SurfaceView уже успешно принимает изображения RGB_888 (насколько я могу судить) и помещает их прямо на экран. Так почему же ImageReader не принимает изображения RGB должным образом? Что я сделал не так?


Подробнее здесь: https://stackoverflow.com/questions/257 ... magereader
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»