当前位置 : 首页 » 互动问答 » 正文

Android Camera2增加亮度

分类 : 互动问答 | 发布时间 : 2018-04-27 16:47:06 | 评论 : 4 | 浏览 : 505 | 喜欢 : 1

我在我的应用程序中使用android camera2拍摄连续图像,此处使用camera2获取图像预览亮度与原始相机相比非常暗。我看过this,但是在那个答案中没有类似的要求。

我尝试按照建议here:

建议在camera2中设置亮度。请注意,只有在android.control.aeMode!= OFF时,此控件才会生效。这个控件即使在android.control.aeLock == true时也会生效。             captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,CaptureRequest.CONTROL_AE_MODE_ON);             captureRequestBuilder.set(CaptureRequest.CONTROL_AE_LOCK,true);             captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION,6);

但它仍然只显示预览为深色图像,如下所示

查看区别:

原始相机:

使用Camera2: enter image description here

什么是我需要传递的值作为第二个参数:enter image description here

captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION,6); 例如,如果曝光值(EV)步长为0.333,则'6'表示曝光补偿为+ 2EV;如果曝光值(EV) -3意味着-1EV的曝光补偿。

但亮度仍然没有影响。

I kept 6 because as suggested in doc's:

For example, if the exposure value (EV) step is 0.333, '6' will mean an exposure compensation of +2 EV; -3 will mean an exposure compensation of -1 EV.

But still no effect in brightness..

回答(4)

  • 1楼
  • CONTROL_AE_LOCK应该关闭。你误解了文档,可能文档本身有点混乱。

    请注意,此控件只有在有效时才会生效   android.control.aeMode!= OFF。即使在此时,该控件也会生效   android.control.aeLock == true。

    这意味着当自动曝光锁定开启时,曝光补偿将应用于锁定曝光,而不是拍摄照片时的瞬间曝光。

    即使在你的重复请求中,曝光被锁定,所以它不起作用。

    删除AE锁定,它应该工作。

  • 2楼
  • 你可以试试这个

     public void setBrightness(int value){
        int brightness =(int)(minCompensationRange +(maxCompensationRange  -  minCompensationRange)*(value / 100f));
        previewRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION,brightness);
        applySettings();
     }
    
    private void applySettings(){
        captureSession.setRepeatingRequest(previewRequestBuilder.build(),null,null);
    }
  • 3楼
  • 首先,不要锁定自动曝光 - 这在调整曝光补偿时不需要。

    其次,您是否使用新的捕捉请求调用了CameraCaptureSession.setRepeatingRequest?

  • 4楼
  • 在设置CONTROL_AE_EXPOSURE_COMPENSATION时,由docs定义的第二个参数与CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP

    相关。调整以步数计算,步长由android.control.aeCompensationStep定义,允许的范围由android.control.aeCompensationRange定义。“

    在+ 2EV的例子中,6的值只有在步长为0.333时才是正确的,这只是一个例子

    下面的代码会给你曝光补偿值,用于+ 2EV

     CameraManager manager =(CameraManager)this.getSystemService(Context.CAMERA_SERVICE);
    CameraCharacteristics特性= manager.getCameraCharacteristics(cameraId);
    double exposureCompensationSteps = features.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP).doubleValue();
    int exposureCompensation =(int)(2.0 / exposureCompensationSteps);
    

    我还建议你检查一下值是否在CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE指定的范围内

相关阅读: