【问题标题】:How to specify the exposure, focus and white balance to the video recording?如何为录像指定曝光、对焦和白平衡?
【发布时间】:2013-01-20 14:47:32
【问题描述】:

我有一个程序可以使用默认参数拍摄视频,并且当我移动相机时会自动调整曝光、对焦和白平衡。我想在程序中添加 2 个按钮:LOCK 和 PRESET。按下 LOCK 按钮时,曝光、对焦和白平衡将被固定,它们的值将作为用户设置存储。 PRESET 按钮用于设置相机的用户设置,以确保我们可以拍摄具有相同曝光、对焦和白平衡值的所有视频。

锁定部分很简单,我只需要更改模式,所以我想知道是否有任何方法可以获取和设置曝光、对焦和白平衡的值。

以曝光为例,默认情况下,exposureMode设置为AVCaptureExposureModeContinuousAutoExposure,也就是说,当我拿着iPhone拍摄视频时,会自动调整曝光,以确保我们在明亮或黑暗中都能清楚地看到场景环境。

AVCaptureDevice* pCaptureDevice = [self videoDeviceWithPosition:AVCaptureDevicePositionBack];
[pCaptureDevice lockForConfiguration:nil];
[pCaptureDevice setExposureMode:AVCaptureExposureModeContinuousAutoExposure];
[pCaptureDevice unlockForConfiguration];

当按下LOCK按钮时,我将exposureMode更改为AVCaptureExposureModeLocked,这样当前的曝光值就不会再改变了。

[pCaptureDevice lockForConfiguration:nil];
[pCaptureDevice setExposureMode:AVCaptureExposureModeLocked];
[pCaptureDevice unlockForConfiguration];

但是,如何获取按下按钮时的曝光值?更重要的是,当按下 PRESET 时,如何将曝光值设置回 AVCaptureDevice。

我在论坛里搜索,只找到了 Michael Grinich 的帖子:Accessing iOS 6 new APIs for camera exposure and shutter speed。我按照他的发现并尝试使用私有API来获取和设置exposureGain和exposureDuration,但我发现在AVCaptureExposureModeContinuousAutoExposure模式下,当我将相机从黑暗环境移动到明亮环境时,这两个值从未改变(exposureGain = 1.0和曝光持续时间 = {1, 30, 1, 0})。而且设置它们根本不会改变曝光。

[pCaptureDevice lockForConfiguration:nil];
[pCaptureDevice setExposureMode:AVCaptureExposureModeLocked];
[pCaptureDevice setManualExposureSupportEnabled:YES];
NSLog(@"exposure gain: %f", [pCaptureDevice exposureGain]);
[pCaptureDevice setExposureGain:3.0];
NSLog(@"exposure gain: %f", [pCaptureDevice exposureGain]);
[pCaptureDevice unlockForConfiguration];

谁能帮我解决这个问题?提前非常感谢!

【问题讨论】:

  • 您对此有什么发现吗?我也在为同样的事情而苦苦挣扎。
  • 你成功了吗?

标签: ios camera avcapturedevice


【解决方案1】:

我在Accessing iOS 6 new APIs for camera exposure and shutter speed 上添加了一个可能对您有所帮助的答案。我可以在这里添加更多细节...

手动设置焦点与我概述的设置曝光的结构完全相同。那就是:

#define AVCaptureFocusModeManual     3
NSError*    error = nil;
if ([captureDevice lockForConfiguration:&error]) {
    captureDevice.manualFocusSupportEnabled = YES;
    if ([captureDevice isFocusModeSupported:AVCaptureFocusModeManual]) {
        captureDevice.focusMode = AVCaptureFocusModeManual;
        // this is a value [0..1]
        captureDevice.focusPosition = ...;
    }
    [captureDevice unlockForConfiguration];
}

白平衡似乎没有曝光和对焦那样的特殊模式。不要将 WhiteBalanceMode 设置为锁定,否则您似乎可以只设置色温:

// this is also a value [0..1]
captureDevice.whiteBalanceTemperature = ...;

【讨论】:

    【解决方案2】:

    要设置手动固定曝光值和 ISO,您现在可以这样做:

    [Device lockForConfiguration:nil];
    [Device setExposureModeCustomWithDuration:CMTimeMake(5, 100) ISO:AVCaptureISOCurrent completionHandler:nil]; //currently set to 50ms for example
    [Device unlockForConfiguration];
    

    你可以在这里参考它的文档:https://developer.apple.com/reference/avfoundation/avcapturedevice/1624646-setexposuremodecustomwithduratio?language=objc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-28
      • 2014-02-10
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 2011-09-25
      • 1970-01-01
      相关资源
      最近更新 更多