AVCaptureSession не дает хорошего качества фотографии и хорошего разрешения

Я работаю с AVCaptureSession для захвата изображения. Его рабочий штраф но не дает хорошего разрешения. Я сравнил его с изображением, снятым камерой iPhone, и я обнаружил, что iPhone Camera Image намного лучше, чем AVCaptureSession изображение.

Я видел 3-4 ссылки на stackOverflow об этом, но не нашел никакого решения.

Также я пробовал все пресеты

AVCaptureSessionPresetPhoto, 
AVCaptureSessionPresetHigh, 
AVCaptureSessionPresetMedium, 
AVCaptureSessionPresetLow, 
AVCaptureSessionPreset352x288, 
AVCaptureSessionPreset640x480, 
AVCaptureSessionPreset1280x720, 
AVCaptureSessionPreset1920x1080, 
AVCaptureSessionPresetiFrame960x540, 
AVCaptureSessionPresetiFrame1280x720, 

но все же изображение имеет меньшее качество. Пожалуйста, дайте мне знать, если мой вопрос недостаточно ясен или я что-то пропустил.

Любая помощь будет оценена.

Ответы

Ответ 1

При использовании предустановленного AVCaptureSessionPresetPhoto с AVCaptureStillImageOutput я могу записывать изображения на iPhone 4S с разрешением 3268x2448, что является тем же самым разрешением, которое дает встроенное приложение для камеры. То же самое верно для iPhone 4, Retina iPad и т.д., Поэтому, если вы используете эту предустановку с вводом неподвижного изображения, вы получите буфер образца обратно с -captureStillImageAsynchronouslyFromConnection:completionHandler:, который является собственным разрешением камеры.

Что касается качества фото, помните, что встроенное приложение камеры имеет возможность захватывать фотографии с высоким динамическим диапазоном (HDR) путем быстрого получения изображений с разными уровнями экспозиции. У нас нет доступа к этому через стандартные API-интерфейсы AV Foundation, поэтому мы получаем только одно изображение с определенным уровнем экспозиции.

Если вы отключите HDR, качество изображения будет идентично мне. Вот увеличенная часть снимка, снятого с помощью AVCaptureStillImageOutput:

AVCaptureStillImageOutput image

и вот один из встроенного приложения для фотографий:

Built-in Photos image

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

Я захватил первое изображение, используя приложение примера SimplePhotoFilter из мою инфраструктуру с открытым исходным кодом GPUImage, заменив по умолчанию GPUImageSketchFilter на GPUImageGammaFilter, который не отрегулируйте гамму любой, просто выполнили переход.

Ответ 2

У нас была такая же проблема с использованием этой ссылки на код. Фотографии были особенно плохими с использованием передней фронтальной камеры iPad.

Мы исправили это, добавив 1 секунду задержки между настройкой менеджера захвата и вызовом метода захвата изображения. Для нас было достаточно большой разницы, что мы были довольны результатом. Похоже, что для открытия затвора необходимо некоторое время, чтобы выполнить настройки автофокуса/белого баланса по умолчанию.

[NSTimer scheduledTimerWithTimeInterval:1.0 
    target:self.captureManager 
    selector:@selector(captureStillImage) 
    userInfo:nil repeats:NO];

Ответ 3

Просто добавьте эту строку кода в свой файл

self.captureSession.sessionPreset = AVCaptureSessionPresetPhoto

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