如何从CvCameraViewListener2暂停和继续监听帧

时间:2015-03-05 22:28:55

标签: android opencv

我想从相机中取出一帧,对其进行一些处理并暂停进入的帧直到我再次触摸屏幕。一旦我触摸屏幕,它将恢复接收帧并处理下一帧。我所做的是禁用onCameraFrame中的视图并在onTouch中重新启用它:

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    final Mat rgba = inputFrame.rgba();
    final Mat gray = inputFrame.gray();

    if (mEstimator.getProcessFrameDone()) {
        Log.i(TAG, "Process frame done.");
        mResumeFrameCapture = true;
        mProcessThisFrame = false;
        mOpenCvCameraView.disableView();

    }

    if (mProcessThisFrame) {
        Log.i(TAG, "Processing frame.");
        mEstimator.processFrame(rgba);

    }

    Core.flip(rgba, rgba, 1);
    return rgba;
}

public boolean onTouch(View v, MotionEvent event) {
    Log.i(TAG, "Screen touched.");

    mProcessThisFrame = true;

    if (mResumeFrameCapture) {
        Log.i(TAG, "Resuming frame captures.");
        mEstimator.setProcessFrameDone();
        mProcessThisFrame = false;

        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6,
        mContext, mLoaderCallback);
    }
    mResumeFrameCapture = false;
    return false;
}

问题是,我认为disableView无法正常工作。当我通过调试器运行它时,我甚至无法跨过它。它只是挂起。但是,当您按下多任务按钮并使其暂停时,onPause运行相同的disableView代码,您可以跳过它。我已经尝试过直接运行onPause,但它仍然无法运行。关于如何正确禁用视图的任何想法?

2 个答案:

答案 0 :(得分:0)

我发现了原因。这是因为您无法禁用OnCameraFrame功能中的视图。你必须在功能之外做。

答案 1 :(得分:0)

要暂停时只需输入以下内容:

cameraBridgeViewBase.setVisibility(SurfaceView.INVISIBLE);

以及以下要恢复的内容:

cameraBridgeViewBase.setVisibility(SurfaceView.VISIBLE);

免责声明!这实际上并没有暂停流,只是消除了可见性,因此可以在屏幕上显示任何其他对象。