我在android中遇到以下问题:
在我的项目中,有一个参数" CMat"这是从活动开始时的文件加载的。然后在系统从相机获取帧时有一个线程,有一个线程使用此CMat对相机捕获的图像进行一些计算。在这个线程中,我尝试跟踪CMat的大小并输出它。几次输出后,它的大小突然改变(显示如下),我的应用程序崩溃(致命信号11 sigsegv在某个内存位置)。
08-12 13:44:32.868: I/CMat(21267): 128x500
08-12 13:44:35.061: I/CMat(21267): 128x500
08-12 13:44:37.343: I/CMat(21267): 128x500
08-12 13:44:39.565: I/CMat(21267): 128x500
08-12 13:44:41.788: I/CMat(21267): 128x500
08-12 13:44:44.240: I/CMat(21267): 0x0 // sometimes it would turn to a very big size
有谁知道为什么?
构建OpenCV Mat类:
我尝试使用一个线程从文件加载,在这个线程中,我首先加载它并将其地址传递给处理程序。在处理程序中,我用这个地址重建CMat。
//in load file thread:
Mat centerMat = FileIO.ReadMat(path+"center.txt");
Bundle bundle = new Bundle();
bundle.putLong("centerAddr", centersMat.nativeObj);
msg.setData(bundle);
msg.what = Data_prepare;
Eventhandler.sendMessage(msg);
// in handler:
if (msg.what == Data_prepare) {
CMat = new Mat((long) msg.getData().getLong("centerAddr"));
// in Camera thread
double[] feature = extract(rgba, CMat); // my function to extract feature. I don't change the CMat in my function