2013-05-15 75 views
0

我在Android上使用OpenCV,我不明白爲什麼我不能實例化一個簡單的Mat。我認爲我沒有使用BaseLoaderCallback正確實施OpenCV。Android上的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

嘗試使'Mat'變量全局。 –

回答

1

試試這段代碼:

Mat m;私人靜態最終字符串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; 
    } 
} 
}; 

OpenCV函數如Mat必須在任何一個或threadAsyncTask從OpenCV的函數內被調用。