2012-06-09 4 views
14

Estoy trabajando con AVCaptureSession para capturar la imagen. Funciona bien pero no da una buena resolución. Lo comparé con la imagen capturada por la cámara del iPhone y encontré que la imagen de la cámara del iPhone es mucho mejor que la imagen AVCaptureSession.AVCaptureSession no ofrece una buena calidad de foto y buena resolución

He visto de 3 a 4 enlaces en stackOverflow acerca de esto, pero no he podido encontrar ninguna solución.

También he probado todos los preajustes

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

pero aún así la imagen es de menor calidad. Por favor, avíseme si mi pregunta no es lo suficientemente clara o si me perdí algo.

Cualquier ayuda será apreciada.

+0

Les aconsejaría que echen un vistazo a esta aplicación de ejemplo de 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: he capturado una imagen con este código de muestra, pero la imagen fija no es buena. – TheTiger

+0

¿Qué valor está configurando para sessionPreset ..? –

Respuesta

13

Cuando se utiliza el AVCaptureSessionPresetPhoto preestablecido con un AVCaptureStillImageOutput, soy capaz de capturar imágenes en un iPhone 4S con una resolución de 3268x2448, que es la misma que la resolución exacta incorporados en los rendimientos de la aplicación de la cámara. Lo mismo es cierto para el iPhone 4, Retina iPad, etc., así que si usa ese preajuste con una entrada de imagen fija, obtendrá un buffer de muestra desde -captureStillImageAsynchronouslyFromConnection:completionHandler: que es la resolución de la cámara nativa.

En cuanto a la calidad de la foto, recuerde que la aplicación de cámara incorporada tiene la capacidad de capturar fotografías de alto rango dinámico (HDR) mediante la adquisición rápida de imágenes en diferentes niveles de exposición. No tenemos acceso a esto a través de las API estándar de AV Foundation, por lo que todo lo que obtenemos es una imagen con un nivel de exposición definido.

Si desactiva HDR, la calidad de imagen será idéntica a la mía. Aquí está una parte ampliada de una foto capturada utilizando un AVCaptureStillImageOutput:

AVCaptureStillImageOutput image

y aquí está uno de la aplicación integrada de la foto:

Built-in Photos image

Haciendo caso omiso de las ligeras diferencias en debido a un pequeño cambio en la dirección de la cámara, la resolución y la fidelidad de las imágenes capturadas en ambos sentidos parecen ser las mismas.

Capturé la primera imagen usando la aplicación de ejemplo SimplePhotoFilter de my open source GPUImage framework, reemplazando el GPUImageSketchFilter por defecto con un GPUImageGammaFilter que no ajustó el gamma, solo actuó como un paso.

+0

¡Gracias por tu respuesta! Descargué su marco de GPUImage hace un mes y también lo he usado en mi aplicación de prueba y lo encontré genial. mi aplicación actual admite toda la orientación y el flash en el botón Off, el marco GPUImage es un gran proyecto en sí mismo y solo quiero usar una parte ... y no puedo hacer esto y mi vista de cámara es de 359x280 en paisaje, por lo que GPUImage es difícil para usar para mí. :-( – TheTiger

+0

es posible establecer cualquier otro ajuste preestablecido distinto de todo ...? – TheTiger

+1

@VakulSaini - Simplemente busque en las clases GPUImageStillCamera y GPUImageVideoCamera, donde puede ver cómo configuro las entradas de AV Foundation y capturo fotos. Este código funciona, así que basar su propia implementación en esto. No estoy seguro de por qué está preguntando sobre otros ajustes preestablecidos, porque si está tomando una foto, querrá usar AVCaptureSessionPresetPhoto para la captura de mayor resolución. Cualquier otra cosa será menor resolución que la cámara nativa. –

6

Tuvimos el mismo problema al usar esa referencia de código. Las fotos fueron especialmente malas usando la cámara frontal del iPad.

Lo arreglamos agregando un retraso de 1 segundo entre configurar el administrador de captura y llamar al método de captura de imágenes. Nos hizo una diferencia lo suficientemente grande como para estar contentos con el resultado. Parece que la cámara necesitó algo de tiempo para abrir el obturador y realizar las opciones predeterminadas de enfoque automático/balance de blancos.

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

Sí, lo he intentado también, pero creo que no debería preocuparme porque la captura de imágenes por Apple El código de muestra AVCam también tiene mala calidad ... solo la cámara original de iPhone captura las buenas fotos ... :-) – TheTiger

4

Sólo agregue esta línea de código en el archivo de

self.captureSession.sessionPreset = AVCaptureSessionPresetPhoto 

Usted recibirá una resolución impresionante como la aplicación de la cámara integrada de manzana.

Cuestiones relacionadas