2016-04-13 28 views
3

My uygulaması oluşturmak uygulaması yaklaşık 3 dakika boyunca iyi çalışıyorAndroid - OpenCV - hata:! (-215) u = 0 fonksiyonu void cv :: Mat ::

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) 

bu hata ile çökmesini tutar aniden ortada bu hata ortaya çıktığında, kilitlenmeye devam ettiği satır

Herhangi bir öneriniz var mı?

+1

hatası [buradan] olur (https:

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

dinamik ayırmayı önlemek için, ben sadece böyle bir şey yapacağını : //github.com/Itseez/opencv/blob/master/modules/core/src/matrix.cpp#L426). Bu, yeterli bellek ayıramayacağınız anlamına gelir. Temelde hafızanız bitti. Her seferinde yeni matrisler oluşturmak yerine, bunları bir kez (sınıf üyeleri olarak) tahsis edip yeniden kullanmanız daha iyi olur. – Miki

cevap

1

new anahtar sözcüğünü kullanarak, free store (genellikle heap ile aynı şey) üzerinde Mat() nesnesi için bellek ayırıyorsunuz. Bu, daha sonra bu nesneyi açıkça delete gerektirir. Bunu yapmadığınız için uygulamanızın çökmesine neden olan bir bellek sızıntısı oluşturdunuz. Bu nedenle, her new için, karşılık gelen delete olmalıdır. Senin durumunda

, bu gibi bir şey olacaktır:

Mat grayImage1 = frame1.gray();