Использование светодиодной вспышки камеры с OpenCV на Android - PullRequest
3 голосов
/ 15 марта 2012

У меня есть приложение, использующее OpenCV для Android, и мне было интересно, можно ли включить светодиод камеры.

В настоящее время моя камера настроена с использованием следующего кода:

camera = new VideoCapture(Highgui.CV_CAP_ANDROID);

Все примеры, которые я видел для включения светодиодной вспышки, требуют Camera.Parameters, к которому у меня нет доступа при этой настройке камеры.

Есть ли простой способ включить светодиод безпереключение на использование базового класса Camera для моего видеопотока, поскольку это имеет тенденцию быть намного медленнее.

Спасибо за любую помощь заранее.

Ответы [ 4 ]

4 голосов
/ 26 мая 2012

В OpenCV для Android 2.4 вы можете сделать это,

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

Другие варианты: CV_CAP_ANDROID_FLASH_MODE_AUTO, CV_CAP_ANDROID_FLASH_MODE_OFF, CV_CAP_ANDROID_FLASH_MODE_TORCH и CV_CAP_ANDROID_FLASH_MODE_REDEYE.

Однако, используя это, приложение автоматически закрывается на моем планшете (Asus TF101).Надеюсь, что это работает на других.

4 голосов
/ 12 марта 2015

Можно использовать extends JavaCameraView

открытый класс Tutorial2View extends 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 ();ВКЛ ВЫКЛ светодиода

2 голосов
/ 18 января 2017

Если вы используете 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.

2 голосов
/ 17 марта 2012

Кажется, нет простого способа сделать это. Единственный вариант - использовать класс Android Camera по умолчанию и слегка снизить производительность.

...