在安卓上使用OpenCV与相机LED闪光灯

3
我有一个使用OpenCV for Android的应用程序,并想知道是否可以启用相机的LED。
目前,我的相机使用以下代码进行设置:

camera = new VideoCapture(Highgui.CV_CAP_ANDROID); 我看到的所有启用LED闪光灯的示例都需要使用Camera.Parameters,但是在这种相机设置中我无法访问它。
是否有任何简单的方法可以在不切换到使用基本的Camera类来进行视频流的情况下启用LED,因为后者速度较慢。
提前感谢您的帮助。
4个回答

4
你可以使用继承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();

            }
        }
    }

}

调用setupCameraFlashLight()函数来开启或关闭LED灯。


感谢您的分享 =) - AuroraBlaze

4
在安卓2.4版的OpenCV中,您可以这样做:
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

但是,在我的平板电脑(Asus TF101)上使用这个会导致应用程序自动关闭。希望它在其他设备上能够运行。


谢谢,我之前在使用OpenCV for Android 2.3,但是现在会尝试用2.4版本。 - woodstock365

2

似乎没有简单的方法来实现这一点。唯一的选择是使用默认的Android Camera类并稍微牺牲一些性能。


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();

也许你应该使用FLASH_MODE_ON而不是FLASH_MODE_TORCH。 在我的OpenCV 2.4.9上可以工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接