2016-04-13 55 views
3

我的應用程序保持與此錯誤的Android - opencv的 - 錯誤:(-215)U在函數void CV = 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) 

的應用程序運行良好約3分鐘崩潰當突然在中間這個錯誤顯示在這裏是它不斷崩潰的線

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

有什麼建議嗎?

+1

錯誤發生[這裏](HTTPS ://github.com/Itseez/opencv/blob/master/modules/core/src/matrix.cpp#L426)。這意味着你不能分配足夠的內存。你基本上沒有記憶。不要每次都創建新的矩陣,最好將它們分配一次(作爲類成員)並重用它們。 – Miki

回答

1

通過使用new關鍵字,您正在爲free store上的Mat()對象(通常與heap相同)分配內存。這要求您稍後明確地爲此對象設置delete。由於您沒有這樣做,您創建了一個內存泄漏,導致您的應用程序崩潰。因此,每new,您必須有相應的delete

在你的情況,這將是這樣的:

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

爲了避免動態分配的,我只想做這樣的事情:

Mat grayImage1 = frame1.gray(); 
相關問題