简体   繁体   English

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

[英]Using Camera LED Flash with OpenCV on Android

I have an application using OpenCV for Android and was wondering if it was possible to enable the camera's LED. 我有一个使用OpenCV for Android的应用程序,并想知道是否可以启用相机的LED。

Currently my camera is set up using the following code: 目前我的相机使用以下代码设置:

camera = new VideoCapture(Highgui.CV_CAP_ANDROID);

All examples I've seen which enable the LED Flash require Camera.Parameters which I don't have access to with this camera setup. 我见过的所有启用LED闪光灯的例子都需要Camera.Parameters ,这是我无法使用此相机设置的。

Is there any simple way to enable the LED without switching to using the basic Camera class for my videostream, as this tends to be much slower. 是否有任何简单的方法来启用LED而不切换到我的视频流使用基本的Camera类,因为这往往要慢得多。

Thanks for any help in advance. 在此先感谢您的帮助。

In OpenCV for Android 2.4, you can do this, 在OpenCV for Android 2.4中,你可以这样做,

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

Other options are: CV_CAP_ANDROID_FLASH_MODE_AUTO , CV_CAP_ANDROID_FLASH_MODE_OFF , CV_CAP_ANDROID_FLASH_MODE_TORCH and CV_CAP_ANDROID_FLASH_MODE_REDEYE . 其他选项包括: CV_CAP_ANDROID_FLASH_MODE_AUTOCV_CAP_ANDROID_FLASH_MODE_OFFCV_CAP_ANDROID_FLASH_MODE_TORCHCV_CAP_ANDROID_FLASH_MODE_REDEYE

However, using this causes the application to automatically close on my tablet (Asus TF101). 但是,使用此功能会导致应用程序在我的平板电脑上自动关闭(华硕TF101)。 Hopefully it works on others. 希望它适用于其他人。

You can use extends JavaCameraView 您可以使用扩展JavaCameraView

public class Tutorial2View extends JavaCameraView{ 公共类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();

            }
        }
    }

}

} }

Call setupCameraFlashLight(); 调用setupCameraFlashLight(); to ON OFF the LED light 关闭LED灯

If you use JavaCameraView you can simply add on the end two methods to your JavaCameraView.java class: 如果您使用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);
}

You can run them in your activity as follow: 您可以在活动中运行它们,如下所示:

private JavaCameraView javaCameraView;

javaCameraView.turnOnTheFlash();

javaCameraView.turnOffTheFlash();

Mayby you should use FLASH_MODE_ON rather than FLASH_MODE_TORCH. Mayby你应该使用FLASH_MODE_ON而不是FLASH_MODE_TORCH。

It works for my on OpenCV 2.4.9. 它适用于我的OpenCV 2.4.9。

It seems there is no easy way to do this. 似乎没有简单的方法可以做到这一点。 The only option is to use the default Android Camera class and take the slight performance hit. 唯一的选择是使用默认的Android Camera类并略微降低性能。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM