android - OpenCV Android-打开相机闪光灯

标签 android flash opencv

我想在应用程序openCV打开后在相机中打开Flash Led,但无法访问相机:

mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_native_surface_view);

//此行不起作用。设置方法不存在
mOpenCvCameraView.set(Highgui.CV_CAP_PROP_ANDROID_FLASH_MODE,Highgui.CV_CAP_ANDROID_FLASH_MODE_ON);

最佳答案

如果您使用的是openCV v3.0.0,则可以创建新类(来自带有一些修改的示例tutorial3):

public class Tutorial3View extends JavaCameraView implements PictureCallback {
    private String mPictureFileName;

    public Tutorial3View(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);
    }
    public List<Size> getResolutionList() {
        return mCamera.getParameters().getSupportedPreviewSizes();
    }
    public void setResolution(int w, int h) {
        disconnectCamera();
        mMaxHeight = h;
        mMaxWidth = w;
        connectCamera(getWidth(), getHeight());
    }

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

然后修改您的 Activity (用 Tutorial3View 代替 CameraBridgeViewBase ):
private Tutorial3View mOpenCVCameraView;   

mOpenCVCameraView = (Tutorial3View) findViewById(R.id.camera_surface_view);
mOpenCVCameraView.setCvCameraViewListener(this);
mOpenCVCameraView.setOnTouchListener(MainActivity.this);

//then you can set effect, for example torch:
mOpenCVCameraView.setEffect(Camera.Parameters.FLASH_MODE_TORCH);

关于android - OpenCV Android-打开相机闪光灯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27382720/

相关文章:

c++ - openCV 3.0:如何保存/加载 cv::ml::boost 模型

android - Adobe AIR 3.0 captive runtime 与哪些版本的 Android 和 iOS 兼容?

java - 集成 Java 和 Flex

android - "Plugins on demand"设置激活的移动 HTML5 音频播放器

java - 检索手机上已安装应用程序所需功能的列表

python - 将变换矩阵应用于 OpenCV 图像中的像素

python - Spatstat:给定二维点列表,如何将它们连接到多边形中,并进一步使其成为研究区域?

java - 如何从 fragment 中的 MainActivity 工具栏隐藏项目

android - Kotlin 多平台移动 : Flow<List<*SomeModel*>> gets mapped to Flow<NSArray> in iOS

android - SQLite/GreenDAO session 范围