如何在拍摄照片时从Android手机获取AutoExposureCompensation等级(亮度)?
我可以拍张照.我可以访问摄像机的参数,包括曝光补偿(当我检查时总是为零),但我需要在拍摄照片时获得AE补偿等级,而不是之前和之后.
背景:我希望在特定时间拍摄的所有照片都使用相同的AE补偿等级拍摄照片.我不希望Android相机通常会对曝光级别或白平衡进行数百次调整.我想获得一次,并为所有后续照片设置相同的设置.
我已经尝试过使用"意图"来拍照,OpenCV,碎片等.我似乎无法使用其中任何一种获得AE补偿设置.这是我尝试过的最新代码,从JavaCameraView的扩展版本开始:
import org.opencv.android.JavaCameraView;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.Size;
import android.util.AttributeSet;
import android.util.Log;
@SuppressWarnings("deprecation")
public class NewJavaCameraView extends JavaCameraView implements PictureCallback {
public int getExposureCompensation(){
return mCamera.getParameters().getExposureCompensation();
}
@SuppressWarnings("deprecation")
public void takePicture(final String fileName) {
Log.i(TAG, "Taking picture");
this.mPictureFileName = fileName;
Camera.Parameters params = mCamera.getParameters();
int exposureComp = params.getExposureCompensation();
mCamera.setPreviewCallback(null);
// PictureCallback is implemented by the current class
int otherexposureComp =this.getExposureCompensation();
mCamera.takePicture(null, null, this);
}
@SuppressWarnings("deprecation")
@Override
public void onPictureTaken(byte[] data, Camera camera) …Run Code Online (Sandbox Code Playgroud) 我花了几天(好吧,晚上)试图解决这个问题。网上有很多例子是针对不同版本的 Android Studio、不同版本的 Android、不同版本的 OpenCV,我无法让它们中的任何一个进入最终的“工作”阶段。
这个例子(基于youtube 教程,我到了需要权限的地步。没关系,我添加了它并检查它们,它会弹出询问用户相机权限。但屏幕保持空白。我已经进行了 logcat 调试,似乎所有正确的方法都被调用了。希望得到任何帮助。
代码:
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mytestopencvapp" >
<uses-permission android:name="android.permission.CAMERA"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
主活动.java
package com.example.mytestopencvapp;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceView;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.JavaCamera2View;
import org.opencv.android.JavaCameraView;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import …Run Code Online (Sandbox Code Playgroud)