我正在使用AVCaptureSession
来捕捉图像。它的工作正常
但没有给出好的解决方案。我把它与iPhone Camera拍摄的图像进行了比较,我发现iPhone相机图像比AVCaptureSession
图像要好得多。
我在stackOverflow上看到过3-4个关于此的链接,但找不到任何解决方案。
我也尝试了所有的预设
AVCaptureSessionPresetPhoto,
AVCaptureSessionPresetHigh,
AVCaptureSessionPresetMedium,
AVCaptureSessionPresetLow,
AVCaptureSessionPreset352x288,
AVCaptureSessionPreset640x480,
AVCaptureSessionPreset1280x720,
AVCaptureSessionPreset1920x1080,
AVCaptureSessionPresetiFrame960x540,
AVCaptureSessionPresetiFrame1280x720,
但静止图像的质量较差。如果我的问题不够清楚或者我错过了什么,请告诉我。
答案 0 :(得分:13)
当使用带有AVCaptureStillImageOutput的预设AVCaptureSessionPresetPhoto时,我能够以3268x2448的分辨率在iPhone 4S上捕捉图像,这与内置相机应用程序产生的分辨率完全相同。对于iPhone 4,Retina iPad等也是如此,因此如果您将该预设与静止图像输入一起使用,您将从-captureStillImageAsynchronouslyFromConnection:completionHandler:
获得一个样本缓冲区,这是本机相机分辨率。
关于照片质量,请记住内置相机应用程序能够通过快速采集不同曝光级别的图像来捕捉高动态范围(HDR)照片。我们无法通过标准的AV Foundation API访问它,因此我们得到的只是一个定义曝光级别的图像。
如果关闭HDR,图像质量与我相同。以下是使用AVCaptureStillImageOutput拍摄的照片的放大部分:
这是内置照片应用程序中的一个:
由于相机方向稍微偏移,忽略了光线的微小差异,两种方式拍摄的图像的分辨率和保真度看起来都是一样的。
我使用来自my open source GPUImage framework的SimplePhotoFilter示例应用程序捕获了第一个图像,将默认的GPUImageSketchFilter替换为没有调整任何伽玛值的GPUImageGammaFilter,只是充当了直通。
答案 1 :(得分:7)
只需在文件中添加以下代码
即可self.captureSession.sessionPreset = AVCaptureSessionPresetPhoto
你会得到一个很棒的分辨率,比如苹果的集成相机应用程序。
答案 2 :(得分:6)
我们使用该代码引用时遇到了同样的问题。使用iPad前置摄像头拍摄的照片特别糟糕。
我们通过在设置捕获管理器和调用捕获图像方法之间添加1秒的延迟来修复它。它给我们带来了很大的不同,我们对结果感到满意。看来相机需要一些时间来打开快门并执行自动对焦/白平衡默认选项。
[NSTimer scheduledTimerWithTimeInterval:1.0
target:self.captureManager
selector:@selector(captureStillImage)
userInfo:nil repeats:NO];