Android - Opencv - error: (-215) u != 0 in function void cv::Mat::create
Android - Opencv - error: (-215) u != 0 in function void cv::Mat::create
我的应用程序不断崩溃并出现此错误
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);
有什么建议吗?
通过使用 new
关键字,您正在为 free store (often the same thing as the heap 上的 Mat()
对象分配内存。这需要您稍后显式 delete
此对象。由于您没有这样做,因此您造成了内存泄漏,导致您的应用程序崩溃。因此,对于每个new
,你必须有一个对应的delete
。
在你的情况下,它会是这样的:
Mat *grayImage1 = new Mat();
delete grayImage1;
为了避免动态分配,我会简单地做这样的事情:
Mat grayImage1 = frame1.gray();
我的应用程序不断崩溃并出现此错误
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);
有什么建议吗?
通过使用 new
关键字,您正在为 free store (often the same thing as the heap 上的 Mat()
对象分配内存。这需要您稍后显式 delete
此对象。由于您没有这样做,因此您造成了内存泄漏,导致您的应用程序崩溃。因此,对于每个new
,你必须有一个对应的delete
。
在你的情况下,它会是这样的:
Mat *grayImage1 = new Mat();
delete grayImage1;
为了避免动态分配,我会简单地做这样的事情:
Mat grayImage1 = frame1.gray();