Android Camera setExposureCompensation(int value)无法按预期工作

时间:2016-09-20 17:24:37

标签: android opencv camera

我在Android上使用opencv库开发应用程序,默认的相机类 JavaCameraView 使用不推荐使用的库android.hardware.Camera

我想手动控制曝光量并禁用相机自动曝光。

我发现禁用它的唯一方法是将 setAutoExposureLock 设置为 true ,但它也会使 setExposureCompensation 无用的。

此外, getExposureCompensation()总是即使在自动曝光模式下也会返回 0 ,如果我用 setExposureCompensation(int value)修改它它返回我设置的值,但相机预览仍然相同。

我发现 setExposureCompensation 多次设置为最大值,或多或少,它会慢慢将相机预览曝光更改为最大曝光值......但它没有任何意义。

以下是代码:

    Camera.Parameters parameters = mCamera.getParameters();
    parameters.setAutoExposureLock(false);
    parameters.setExposureCompensation(parameters.getMaxExposureCompensation());
    mCamera.setParameters(parameters);

    parameters = mCamera.getParameters();
    parameters.setAutoExposureLock(true);
    mCamera.setParameters(parameters);

顺便说一句,我的设备是Moto G(Android 6.0),曝光补偿等级从-12到12,曝光步长为0.166667。

我希望能够进行特定级别的曝光。

2 个答案:

答案 0 :(得分:0)

我找到了更好的解决方案。

setAutoExposureLock 保留为false并在每个 onPreviewFrame()中设置曝光正常。

Camera.Parameters parameters = mCamera.getParameters();
parameters.setExposureCompensation(exposure);
mCamera.setParameters(parameters);

我希望这可以帮助处于相同情况的人。

答案 1 :(得分:0)

我找到了一种更好的曝光率设置方法:

Camera.Parameters params = mCamera.getParameters();
params.setExposureCompensation(-10);
params.setAutoExposureLock(true);
mCamera.setParameters(params);

我先设置setExposureCompensation(),然后将setAutoExposureLock设置为true,然后将此代码放入initializeCamera(),而无需将其放入onPreviewFrame()