我想在使用OpenCV摄像头的应用程序中实现亮度调整。我已经找到了一些方法,并且我已经在JavaCameraView和CameraViewBridge Base的文档中找到了一些可以直接做到这一点的方法,但我还没有找到。
有没有办法做到这一点?
发布于 2019-11-08 19:11:43
按照这些帮助您调整相机曝光的步骤,首先创建一个CustomCameraView java类
public class CustomCameraView extends JavaCameraView implements Camera.PictureCallback {
private String mPictureFileName;
public CustomCameraView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public List<String> getEffectList() {
return mCamera.getParameters().getSupportedFlashModes();
}
public boolean isEffectSupported() {
return (mCamera.getParameters().getFlashMode() != null);
}
public String getEffect() {
return mCamera.getParameters().getFlashMode();
}
public void setEffect(String effect) {
mCamera.getParameters();
Camera.Parameters params = mCamera.getParameters();
params.setFlashMode(effect);
mCamera.setParameters(params);
}
// set Camera Exposure value from input progress (0.0f - 1.0f)
public void setExposure(float progress) {
if (progress < 0.0f && progress > 1.0f) return;
Camera.Parameters params = mCamera.getParameters();
int min = params.getMinExposureCompensation();
int max = params.getMaxExposureCompensation();
float realProgress = progress - 0.5f;
int value;
if (realProgress < 0) {
value = -(int) (realProgress * 2 * min);
} else {
value = (int) (realProgress * 2 * max);
}
// if changed
if (value != params.getExposureCompensation()) {
params.setExposureCompensation(value);
mCamera.setParameters(params);
}
}
public void setPreviewFPS(double min, double max) {
Camera.Parameters params = mCamera.getParameters();
params.setPreviewFpsRange((int) (min * 1000), (int) (max * 1000));
mCamera.setParameters(params);
}
public List<Camera.Size> getResolutionList() {
return mCamera.getParameters().getSupportedPreviewSizes();
}
public void setResolution(int w, int h) {
disconnectCamera();
mMaxHeight = h;
mMaxWidth = w;
connectCamera(getWidth(), getHeight());
}
public Camera.Size getResolution() {
return mCamera.getParameters().getPreviewSize();
}
public void takePicture(final String fileName) {
this.mPictureFileName = fileName;
// Postview and jpeg are sent in the same buffers if the queue is not empty when performing a capture.
// Clear up buffers to avoid mCamera.takePicture to be stuck because of a memory issue
mCamera.setPreviewCallback(null);
// PictureCallback is implemented by the current class
mCamera.takePicture(null, null, this);
}
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// The camera preview was automatically stopped. Start it again.
mCamera.startPreview();
mCamera.setPreviewCallback(this);
// Write the image in a file (in jpeg format)
try {
FileOutputStream fos = new FileOutputStream(mPictureFileName);
fos.write(data);
fos.close();
} catch (java.io.IOException e) {
Log.e("PictureDemo", "Exception in photoCallback", e);
}
}
public void cameraRelease() {
if (mCamera != null) {
mCamera.release();
}
}
}在此之后,在您声明JavaCameraView的活动的布局文件中,将其更改为
<your.package.CustomCameraView
android:id="@+id/cameraViewer"
android:layout_width="380dp"
android:layout_height="450dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:visibility="gone"
opencv:show_fps="false" />注意:使用适当的包名更改your.package
最后,在活动中添加以下内容
cameraBridgeViewBase = (CustomCameraView) findViewById(R.id.cameraViewer);
cameraBridgeViewBase.setExposure(1.0f);注:将此值1.0f更改为所需的值。
我希望这对你有帮助。
https://stackoverflow.com/questions/58764964
复制相似问题