Обработка изображений Android быстрое получение данных изображения

#android #image

#Android #изображение

Вопрос:

Я создаю приложение для Android для выполнения некоторых методов обработки изображений с помощью камеры, и это должно быть быстро. Это псевдокод того, как работает вся система:

 1. loop while not finished
   1.1 get image frame
   1.2 process image for object detection
2. end loop
  

У меня действительно есть вопросы по основам Camera класса:

  1. Быстрее ли предварительный просмотр воспринимаемого изображения с камеры, чем отсутствие предварительного просмотра вообще? Первое означает использование SurfaceView для предварительного просмотра изображения.
  2. Допустим, из takePicture() метода можно получить массив данных изображения без предварительного просмотра?

Мой реальный вопрос заключается в том, каков наилучший способ быстрого и итеративного получения данных изображения (скажем, byte[] массива) после обработки изображения (как указано сверху)?

Я планировал использовать takePicture() метод для получения данных изображения, но мне нужно ваше мнение, если это единственный способ или есть другие лучшие способы.

Комментарии:

1. Вероятно, вы могли бы в основном использовать предварительный просмотр. Вызов takePicture будет выполнен в полном разрешении, и потребуется некоторое время для обработки, прежде чем ваш код действительно получит его. Некоторые приложения используют комбинацию обоих. Выполняйте очень быстрые действия с кадрами предварительного просмотра и общими дорогостоящими вычислениями на кадрах, полученных из takePicture.

2. Как вы получаете кадры предварительного просмотра? Поможет простой фрагмент кода.

Ответ №1:

Вы можете настроить SurfaceView в качестве предварительного просмотра камеры и получать данные каждого кадра предварительного просмотра с помощью PreviewCallback. Это было бы лучше, чем использовать takePicture, если вам не нужно высокое разрешение, которое захватывает takePicture. Другими словами, если вы хотите быстрее получать изображения более низкого качества, используйте PreviewCallback … если вы хотите получать изображения более высокого качества с очень низкой скоростью, используйте takePicture .

Что касается ваших вопросов, я не думаю, что вы можете делать снимки без использования предварительного просмотра, но я могу ошибаться.

 class MainActivity extends Activity implements Camera.PreviewCallback, SurfaceHolder.Callback  {
  ...

  public void surfaceCreated(SurfaceHolder holder)  {
    camera = Camera.open();
    camera.setPreviewCallback(this);
    ...
  }

  public void onPreviewFrame(byte[] data, Camera camera) {
    // image data contained in data... do as you wish
  }
}