2012-06-09 3 views
14

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

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

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

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

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

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

+0

Я бы посоветовал вам ознакомиться с этим примером приложения из apple http://developer.apple.com/library/ios/#samplecode/AVCam/Listings/Classes_AVCamViewController_m.html#//apple_ref/doc/uid/DTS40010112 -Classes_AVCamViewController_m-DontLinkElementID_10 –

+0

@AnkitSrivastava - я захватил изображение, используя этот пример кода, но все же изображение не очень хорошо. – TheTiger

+0

Какое значение вы задаете для sessionPreset ..? –

ответ

13

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

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

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

AVCaptureStillImageOutput image

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

Built-in Photos image

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

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

+0

Спасибо за ваш ответ !! я загрузил вашу инфраструктуру GPUImage месяц назад, а также использовал ее в своем тестовом приложении и нашел ее замечательной. мое текущее приложение поддерживает все ориентации и вспышки на кнопке Off, рамка GPUImage - это большой проект, и я просто хочу использовать его часть ... и не могу этого сделать, и мой просмотр камеры имеет 359x280 пикселей, поэтому GPUImage сложно использовать для меня. :-( – TheTiger

+0

можно установить любой другой пресет, отличный от выше всего.? – TheTiger

+1

@VakulSaini - Просто загляните в классы GPUImageStillCamera и GPUImageVideoCamera, где вы можете увидеть, как я настраивал входные данные AV Foundation и снимал фотографии. работает, поэтому основывайте свою собственную реализацию на этом. Я не уверен, почему вы спрашиваете о других пресетов, потому что если вы снимаете фотографию, вы хотите использовать AVCaptureSessionPresetPhoto для захвата с высоким разрешением. Все остальное будет ниже чем на родной. –

6

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

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

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

Да, я тоже пробовал это, но я думаю, что я не должен волноваться об этом, потому что захват изображения яблоком образец кода AVCam также имеет плохое качество .... только iPhone оригинальная камера захватывает хорошие фото ... :-) – TheTiger

4

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

self.captureSession.sessionPreset = AVCaptureSessionPresetPhoto 

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

Смежные вопросы