OpenCV相机延迟

时间:2019-05-26 12:06:30

标签: android opencv android-camera

我正在使用OpenCV尝试在Android上检测对象。问题是相机的屏幕看起来不稳定。

1)我试图降低相机的分辨率。

mOpenCvCameraView.setMaxFrameSize(640, 480);

2)我尝试使用i % 60 == 0来不每次都在onCameraFrame中调用JNI函数(surfWithFlann)。

@Override
    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
        matInput = inputFrame.rgba();
        Imgproc.cvtColor(matInput, matGray, Imgproc.COLOR_RGB2GRAY);
        i++;
        if(pressedBtn.equals("지폐") && i % 60 == 0) {
            surfWithFlann(matGray.getNativeObjAddr(), image_matches.getNativeObjAddr());
            Imgproc.resize(image_matches, image_matches, matGray.size());

            banknotes_result_tts = new String(getJniStringBytes(), Charset.forName("UTF-8"));

            tts.speak(banknotes_result_tts, TextToSpeech.QUEUE_FLUSH, null);

            return image_matches;
        }

        return matInput;
    }

3)我尝试使用AsyncTask,并且有一个JNI函数(surfWithFlann)。 surfWithFlann比较相机拍摄的图像和资产文件发送的其他图像。 这是我的代码。

@Override
    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {

        matInput = inputFrame.rgba();
        Imgproc.cvtColor(matInput, matGray, Imgproc.COLOR_RGB2GRAY);

        if(pressedBtn.equals("지폐")) {
            try {
                image_matches = new SURFAsyncTask().execute(matGray, image_matches).get();
            } catch (ExecutionException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return image_matches;
        }

        return matInput;
    }

    private class SURFAsyncTask extends AsyncTask<Mat, Void, Mat> {

        @Override
        protected Mat doInBackground(Mat... mats) {

            surfWithFlann(mats[0].getNativeObjAddr(), mats[1].getNativeObjAddr());
            Imgproc.resize(mats[1], mats[1], mats[0].size());

            banknotes_result_tts = new String(getJniStringBytes(), Charset.forName("UTF-8"));

            tts.speak(banknotes_result_tts, TextToSpeech.QUEUE_FLUSH, null);

            return mats[1];
        }

    }

但是其中三个效果不好。相机屏幕仍然显得不稳定。预先谢谢你。

0 个答案:

没有答案