OGeek|极客世界-中国程序员成长平台

标题: iOS + AVFoundation。相同手动曝光设置下的不同照片亮度 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 13:04
标题: iOS + AVFoundation。相同手动曝光设置下的不同照片亮度

我使用 AVFoundation 来拍照。麻烦的是,即使曝光持续时间、ISO 和白平衡设置不变,我也会得到不同亮度的照片。手电筒、闪光灯和所有可能的稳定功能均已禁用。

此问题也出现在标准 Apple 应用程序中,该应用程序介绍了如何使用相机:https://developer.apple.com/library/ios/samplecode/AVCam/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010112

这是我通过此应用拍摄的视频,除了在 session 初始化期间设置手动曝光外没有任何变化:

https://www.youtube.com/watch?v=g9NOWGVeftI

请注意,如果数码相机的曝光设置是恒定的(不,这不是设置曝光设置并调用完成处理程序的时刻;设置已经设置)。

增亮并不总是发生,但无论如何,如果我将相机移开并再次瞄准物体,可能会出现明显的亮度差异。但是如果我在不移动相机的情况下制作一系列照片,那么亮度是相同的。

(当然,物体的照片是在相同光线的情况下拍摄的)

可能这种增亮是设置自定义曝光设置的一部分(因为它通常在一开始发生)并且它的后期激活是我应该加快但我不知道该怎么做的过程。

我在 iPod Touch 5 和 iPad Air 上有这个效果。我想这也可能发生在其他 iOS 设备上。

场景亮度似乎会影响最终图像的亮度(以及预览层的亮度)。设备不只是设置给定的曝光设置;它会根据当前场景亮度添加一些校正,并在可见场景的常见亮度发生很大变化时更改此校正。

如果我用手关闭相机,将手移开并拍照,它可能会比之前没有关闭相机拍摄的照片更亮。

可能不仅仅是[仅]亮度,而是对比度,因为当我将相机从白色显示器移开时,屏幕之外的[相对较暗]物体变得可见时,可能会变亮。

曝光目标偏移在增亮前略小于零,增亮后略大于零。

我认为这个值是这个意外调整所基于的参数(如在自动曝光模式下)。

但是试图通过观察目标偏移的变化并设置相等的曝光目标偏差来防止它失败了,因为目标偏移一直在改变,并且不可能让工作相机永久改变它的目标偏差。

尝试通过设置曝光目标偏差来强制调整,使曝光目标偏移值在捕获前远离零也失败了,因为没有任何反应,我可以在尝试补偿后进行增亮。即使在自定义模式下,目标偏差也会影响曝光偏移 [对客户端可见],但它似乎不会影响负责曝光的部件中的设备行为。

我还发现在锁定曝光模式下没有亮度跳跃(或者我错过了......)。我尝试在设置自定义曝光值后设置此模式,但问题是在锁定模式下设备不仅会修复当前曝光值,还会进行初始调整以改变曝光设置。

我在拍照后从 exif 数据和 AVCaptureDevice 实例中获得的曝光值在跳转后不会改变。我尝试通过 KVO 观察曝光值,但没有任何可疑之处。当我设置自定义模式曝光持续时间和 ISO 被更改几次,然后调用完成处理程序。增亮可以晚一些,但不会影响我能得到的当前曝光值。

这一切都令人困惑。如何提供图像亮度和曝光设置之间的直接关系?



Best Answer-推荐答案


经过修改后,我想出了如何轻松锁定曝光。 在主相机初始化期间添加:

device.exposureMode = AVCaptureDevice.ExposureMode.custom

一旦设备被锁定以进行配置

和(非常重要)

device.exposureMode = AVCaptureDevice.ExposureMode.locked

这些都确保:
1.您可以使用自定义设置初始化相机
2. 更改后相机保持完全锁定状态

您的相机初始化代码应如下所示:

 try device.lockForConfiguration()  
          device.exposureMode = AVCaptureDevice.ExposureMode.custom 
          device.setExposureModeCustom(duration: durationCust, iso: minISO, completionHandler: nil)
          device.setWhiteBalanceModeLocked(with: deviceGains) {
                    (timestamp:CMTime) -> Void in
            }
          device.exposureMode = AVCaptureDevice.ExposureMode.locked
            device.unlockForConfiguration()

当您想要主动更改曝光参数时不要在实际更改曝光之外重新声明曝光为锁定或自定义。函数中的代码应如下所示:

try device.lockForConfiguration()
                 device.setExposureModeCustom(duration: durationCust, iso: minISO, completionHandler: nil)
             device.unlockForConfiguration()

我很高兴能解决这个问题 - 我希望有人觉得它有帮助

关于iOS + AVFoundation。相同手动曝光设置下的不同照片亮度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34511431/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) Powered by Discuz! X3.4