2016-04-13 16 views
3

マイアプリを作成するには、アプリが約3分間の罰金を実行しているアンドロイド - OpenCVの - エラー:!(-215)のu = 0関数ボイド品種で::マットは::

FATAL EXCEPTION: Thread-22883 
    Process: com.aar.Cline, PID: 7270 
    CvException [org.opencv.core.CvException: cv::Exception: /Volumes/Linux/builds/master_pack-android/opencv/modules/core/src/matrix.cpp:424: error: (-215) u != 0 in function void cv::Mat::create(int, const int*, int) 
    ] 
    at org.opencv.imgproc.Imgproc.cvtColor_1(Native Method) 
    at org.opencv.imgproc.Imgproc.cvtColor(Imgproc.java:1724) 
    at com.aar.Cline.TrackBallActivity.detectBall(TrackBallActivity.java:592) 
    at com.aar.Cline.TrackBallActivity.onCameraFrame(TrackBallActivity.java:190) 
    at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:391) 
    at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:350) 
    at java.lang.Thread.run(Thread.java:818) 

このエラーでクラッシュし突然途中でこのエラーが表示される場合は、破損し続ける行が表示されます

Mat grayImage1 = new Mat(); 
Imgproc.cvtColor(frame1, grayImage1, Imgproc.COLOR_BGR2GRAY); 

ご意見はありますか?

+1

エラーは[こちら]たまたまな(https:動的な割り当てを避けるために

Mat *grayImage1 = new Mat(); delete grayImage1; 

、私は単にこのような何かをするだろう://github.com/Itseez/opencv/blob/master/modules/core/src/matrix.cpp#L426)。つまり、十分なメモリを割り当てることはできません。あなたは基本的には記憶不足です。毎回新しい行列を作成するのではなく、それらを一度クラスメンバーとして割り当てて再利用する方がよいでしょう。 – Miki

答えて

1

newキーワードを使用すると、free store(多くの場合、heapと同じこと)にあるMat()オブジェクトのメモリが割り当てられます。これを行うには、このオブジェクトを後で明示的にdeleteにする必要があります。あなたはそれをやっていないので、あなたのアプリをクラッシュさせるメモリリークを作成しました。したがって、newごとに、対応するdeleteが必要です。あなたのケースでは

、このようなものになるだろう:

Mat grayImage1 = frame1.gray(); 
関連する問題