java - Android - Opencv - 错误:(-215) u != 0 in function void cv::Mat::create

标签 java android opencv opencv4android

我的应用程序一直因这个错误而崩溃

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 上的Mat() 对象分配内存。 (通常与 heap 相同)。这要求您稍后显式删除 该对象。由于您没有这样做,因此您造成了内存泄漏,导致您的应用程序崩溃。因此,对于每一个new,你都必须有一个相应的delete

在你的情况下,它会是这样的:

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

为了避免动态分配,我会简单地做这样的事情:

Mat grayImage1 = frame1.gray();

关于java - Android - Opencv - 错误:(-215) u != 0 in function void cv::Mat::create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36593821/

相关文章:

python - 无法使用opencv使用霍夫变换定位线

java - windows下如何修改sqlite数据库的读/写权限?

android - 安全取消后台线程中的 ORMLite 写入

c# - 保存我的 Activity xamarin.android 的状态

c++ - 实时视频上的 OpenCV Canny Edge

c++ - Qt OpenCV 网络摄像头流打开和关闭

java - 如何从URL中读取参数中的HashMark

java - 文本流向 HTML

java - 在 java 中使用数组的 get 和 set 方法

android - Xamarin.Forms。 SwipeGesture 和 ScrollView 不能在 Android 上协同工作