17

我正在与AVCaptureSession捕获图像。它工作正常,但没有给出好的分辨率。我将它与 iPhone 相机拍摄的图像进行了比较,我发现 iPhone 相机图像比AVCaptureSession图像好得多。

我在 stackOverflow 上看到了 3-4 个关于此的链接,但找不到任何解决方案。

我也试过所有的预设

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

但静止图像质量较差。如果我的问题不够清楚或者我遗漏了什么,请告诉我。

4

3 回答 3

14

当使用带有 AVCaptureStillImageOutput 的预设 AVCaptureSessionPresetPhoto 时,我能够在 iPhone 4S 上以 3268x2448 的分辨率捕获图像,这与内置相机应用程序产生的分辨率完全相同。iPhone 4、Retina iPad 等设备也是如此,因此如果您使用带有静止图像输入的预设,您将从-captureStillImageAsynchronouslyFromConnection:completionHandler:原始相机分辨率返回样本缓冲区。

关于照片质量,请记住,内置相机应用程序能够通过快速获取不同曝光级别的图像来捕捉高动态范围 (HDR) 照片。我们无法通过标准的 AV Foundation API 访问它,所以我们得到的只是一张处于定义曝光级别的图像。

如果你关闭 HDR,图像质量看起来和我一样。这是使用 AVCaptureStillImageOutput 捕获的照片的放大部分:

AVCaptureStillImage 输出图像

这是内置照片应用程序中的一个:

内置照片图像

忽略由于相机方向的微小变化而导致的轻微照明差异,两种方式拍摄的图像的分辨率和保真度似乎是相同的。

我使用开源 GPUImage 框架中的 SimplePhotoFilter 示例应用程序捕获了第一张图像,将默认的 GPUImageSketchFilter 替换为 GPUImageGammaFilter,该 GPUImageGammaFilter 没有调整任何伽玛,只是充当传递。

于 2012-06-09T20:46:39.517 回答
12

只需在文件中添加这行代码

self.captureSession.sessionPreset = .photo

你会得到一个很棒的分辨率,就像来自苹果的集成相机应用程序一样。

于 2016-01-14T21:30:55.793 回答
6

使用该代码参考时我们遇到了同样的问题。使用 iPad 前置摄像头的照片尤其糟糕。

我们通过在设置捕获管理器和调用捕获图像方法之间添加 1 秒延迟来修复它。它对我们产生了足够大的影响,我们对结果感到满意。看来相机需要一些时间来打开快门并执行自动对焦/白平衡默认选项。

[NSTimer scheduledTimerWithTimeInterval:1.0 
    target:self.captureManager 
    selector:@selector(captureStillImage) 
    userInfo:nil repeats:NO];
于 2012-06-09T14:45:43.200 回答