Android应用程序上的Opencv canny边缘检测崩溃 [英] Opencv canny edge detection crashes on Android app

查看:162
本文介绍了Android应用程序上的Opencv canny边缘检测崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新手使用OpenCV,当我尝试应用Canny探测器时,我的应用程序崩溃了。我已经看过另外一篇关于同样的帖子,但是我试了一下但没有...

I'm new using OpenCV and when I try to apply the Canny detector, my App crashes. I've seen another post about the same but I tried it and nothing...

我使用Android Studio 3.0,OpenCV 3.2.0,我的手机是Android 6.0。 1。

I use Android Studio 3.0, OpenCV 3.2.0 and my phone is Android 6.0.1.

这是我的代码。我尝试了很多组合,当我尝试应用Canny探测器时总是失败。请注意最后一个方法onCameraFrame ...它适用于Rgba和Gray图像,但不适用于Canny:

This is my code. I tried lots of combinations and always fails when I try to apply the Canny detector. Please pay attention at the last method onCameraFrame...It works perfect with both Rgba and Gray image, but not with the Canny:

public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2{


    private static String TAG = "MainActivity";
    JavaCameraView javaCameraView;
    Mat mRgba, imgGray, imgCanny, wide;
    BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status){
            switch(status){
                case BaseLoaderCallback.SUCCESS:{
                    javaCameraView.enableView();
                    break;
                }
                default:{
                    super.onManagerConnected(status);
                    break;
                }
            }
        }
    };

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        javaCameraView = (JavaCameraView) findViewById(R.id.java_camera_view);
        javaCameraView.setVisibility(SurfaceView.VISIBLE);
        javaCameraView.setCvCameraViewListener(this);
    }

    @Override
    protected void onPause(){
        super.onPause();
        if(javaCameraView!=null)
            javaCameraView.disableView();
    }

    @Override
    protected void onDestroy(){
        super.onDestroy();
        if(javaCameraView!=null)
            javaCameraView.disableView();
    }

    @Override
    protected void onResume(){
        super.onResume();
        if(OpenCVLoader.initDebug()){
            Log.i(TAG, "Opencv loaded succesfully");
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        } else {
            Log.i(TAG, "Opencv not loaded");
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_2_0, this, mLoaderCallback);
        }
    }


    @Override
    public void onCameraViewStarted(int width, int height) {
        mRgba = new Mat (height, width, CvType.CV_8UC4);
        imgGray = new Mat (height, width, CvType.CV_8UC1);
        imgCanny = new Mat (height, width, CvType.CV_8UC1);
    }

    @Override
    public void onCameraViewStopped() {
        mRgba.release();
    }

    @Override
    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
        imgGray = inputFrame.gray();
        //mRgba = inputFrame.rgba();

        //Imgproc.cvtColor(mRgba, imgGray, Imgproc.COLOR_RGB2GRAY);
        Imgproc.Canny(imgGray, imgCanny, 50, 150); //detector canny

        return imgCanny;
    }

}

我也想知道它是不是可以捕捉图像并将其保存到图库中。也许使用onTouch方法?非常感谢!

I also like to know if it's possible to catch the image and save it into the gallery. Maybe with the onTouch method? Thank you very much!

推荐答案

只有OpenCV v3.1适用于Canny Edge检测。有更高版本的问题(v3.4)。希望这可以帮助!

Only OpenCV v3.1 worked for me for Canny Edge detection. Had problems with the higher versions (v3.4). Hope this helps!

这篇关于Android应用程序上的Opencv canny边缘检测崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆