我在Android上使用OpenCV,我不明白为什么我无法实例化一个简单的Mat
。我认为我没有使用BaseLoaderCallback正确实现OpenCV。
public class MainActivity extends Activity {
private final String TAG = "Main activity";
private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
setContentView(R.layout.activity_main);
//Mat image = new Mat(); // <--- problem here
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onResume()
{
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mOpenCVCallBack);
}
我的LogCat只是一个FatalSignal 11(SIGSEV)。
编辑:经过多次修改后,现在可行了,我不知道为什么,但谢谢。
答案 0 :(得分:1)
试试这段代码:
Mat m; private static final String TAG =“OCVSample :: Activity”;
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
m=new Mat();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
Mat
等OpenCV函数必须在thread
或AsyncTask
中或在OpenCV函数中调用。