프로그래밍/android

안드로이드 openCV 설치 & 사용 2 / OpenCVLoader.initAsync 에러 / Illegal ArgumentException

nocomet 2016. 6. 1. 15:37

http://nocomet.tistory.com/16


이전 포스팅에 이어서 계속해서 openCV를 사용해보자.



MainActivity.java 

다음과 같이 onResume과 mLoaderCallBack 코드를 넣어주어야한다.

MainActivity의 onCreate 메소드 안에 바로 openCV 관련 메소드나 변수를 이용하면 에러가 발생한다.

onCreate가 호출될때는 아직 해당 프로젝트에 관한 리소스나 정보가 아직 덜 생성된 상태이다. 


즉 openCV 관련 라이브러리가 덜 올려진 상태에서 호출하게 되면 null exception이 발생한다. 


그러므로 해당 앱이 모두 빌드 된 후 onResume 상태에서 Callback 형식으로 라이브러리를 이용해야한다. 이는 openCV만이 아니라,

다른 모듈 형태의 라이브러리를 사용할 때, 보편적으로 사용되는 방식이므로 익혀두는 것이 좋다.



코드를 복사해서 쓰세요



하지만 빌드해보면 예상치 못한 에러가 난다.



이상하게도 설치한 버전이 openCV_2_4_11 이지만, 이 버전으로 컴파일을 하면 openCVLoader가 정상적으로 작동하지 않는다.

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, act, mLoaderCallback);

2_4_11을 다음과 같이 2_4_3으로 변경하자. 

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_11, act, mLoaderCallback);



또한 openCV를 사용하기위해선 NDK를 이용할 수도 있는데, 현재는 자바코드만으로 작성하지만, 경로에 JniLibs가 없어서 에러가 발생할 수도 있다.


다운받은 openCV 경로를 쫒아 jni폴더를 안드로이드 workspace로 옮기자. 






C:\opencv-2.4.11\OpenCV-2.4.11-android-sdk\OpenCV-android-sdk\sdk\native




경로명을 따라가서 jni폴더를 해당 안드로이드 프로젝트의 app > src > main 에 jni폴더를 옮기고 jniLibs 폴더명으로 변경하자.



위 화면 처럼 새로고침을 한 후 jniLibs 폴더가 보인다면 성공이다.


그런 다음에 컴파일읋 하여 에러가 없이 실행되는 것을 확인하자.






다음과 같이 Logcat화면에 문장이 나온다면 성공!