在Android上使用带有OpenCV的Camera LED Flash

时间:2012-03-15 16:28:16

标签: java android opencv camera computer-vision

我有一个使用OpenCV for Android的应用程序,并想知道是否可以启用相机的LED。

目前我的相机使用以下代码进行设置:

camera = new VideoCapture(Highgui.CV_CAP_ANDROID);

我所看到的启用LED闪光灯的所有示例都需要Camera.Parameters我无法通过此相机设置访问。

有没有简单的方法来启用LED而不切换到我的视频流使用基本Camera类,因为这往往要慢得多。

感谢您提前提供任何帮助。

4 个答案:

答案 0 :(得分:4)

在OpenCV for Android 2.4中,你可以这样做,

mCamera.set(
  Highgui.CV_CAP_PROP_ANDROID_FLASH_MODE,
  Highgui.CV_CAP_ANDROID_FLASH_MODE_ON
);

其他选项包括:CV_CAP_ANDROID_FLASH_MODE_AUTOCV_CAP_ANDROID_FLASH_MODE_OFFCV_CAP_ANDROID_FLASH_MODE_TORCHCV_CAP_ANDROID_FLASH_MODE_REDEYE

然而,使用此功能会导致应用程序在我的平板电脑上自动关闭(华硕TF101)。希望它适用于其他人。

答案 1 :(得分:4)

您可以使用extends JavaCameraView

public class Tutorial2View扩展了JavaCameraView {

private static final String TAG = "Sample::Tutorial2View";

private Context myreference;
private static boolean isFlashLightON = false;
public Tutorial2View(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.myreference = context;
}

public List<String> getEffectList() {
    return mCamera.getParameters().getSupportedColorEffects();
}

public boolean isEffectSupported() {
    return (mCamera.getParameters().getColorEffect() != null);
}

public String getEffect() {
    return mCamera.getParameters().getColorEffect();
}

public void setEffect(String effect) {
    Camera.Parameters params = mCamera.getParameters();
    params.setColorEffect(effect);
    mCamera.setParameters(params);
}

public List<Size> getResolutionList() {
    return mCamera.getParameters().getSupportedPreviewSizes();
}

public void setResolution(Size resolution) {
    disconnectCamera();
    mMaxHeight = resolution.height;
    mMaxWidth = resolution.width;
    connectCamera(getWidth(), getHeight());
}

public Size getResolution() {
    return mCamera.getParameters().getPreviewSize();
}

// Setup the camera
public void setupCameraFlashLight() {
    Camera  camera = mCamera;
    if (camera != null) {
        Parameters params = camera.getParameters();

        if (params != null) {
            if (isFlashLightON) {
                isFlashLightON = false;
                params.setFlashMode(Parameters.FLASH_MODE_OFF);
                camera.setParameters(params);
                camera.startPreview();
            } else {
                isFlashLightON = true;
                params.setFlashMode(Parameters.FLASH_MODE_TORCH);
                camera.setParameters(params);
                camera.startPreview();

            }
        }
    }

}

}

调用setupCameraFlashLight();关闭LED灯

答案 2 :(得分:2)

似乎没有简单的方法可以做到这一点。唯一的选择是使用默认的Android Camera类并略微降低性能。

答案 3 :(得分:2)

如果您使用JavaCameraView,您可以直接在JavaCameraView.java类中添加两个方法:

public void turnOffTheFlash() {
    Camera.Parameters params = mCamera.getParameters();
    params.setFlashMode(params.FLASH_MODE_OFF);
    mCamera.setParameters(params);
}

public void turnOnTheFlash() {
    Camera.Parameters params = mCamera.getParameters();
    params.setFlashMode(params.FLASH_MODE_TORCH);
    mCamera.setParameters(params);
}

您可以在活动中运行它们,如下所示:

private JavaCameraView javaCameraView;

javaCameraView.turnOnTheFlash();

javaCameraView.turnOffTheFlash();

Mayby你应该使用FLASH_MODE_ON而不是FLASH_MODE_TORCH。

适用于OpenCV 2.4.9。