我在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。
我希望能够进行特定级别的曝光。
答案 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()
。