2013-05-15 2 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

이 코드 조각을 시도해보십시오

매트 m을; private static final String TAG = "OCVSample :: Activity"; 이러한 Mat 같은

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의 기능은 OpenCV의 함수 내의 thread 또는 하나 또는 AsyncTask에서 호출되어야한다.