android-opencv로 포팅후 코딩해보셨던분 계신가요?^^;
android-opencv포팅이 성공적으로 되고 CVCamera 예제를 돌려봤습니다. 거기에는 FAST,STAR,SURF등의 알고리즘을 이용하여 추출점을 뽑아내는 소스가 작성되있더군요. 특히 알고리즘이 구현되어있는 소스를 알아보려 따라가다보니 라이브러리 파일뒤로 숨더군요^^; 이 라이브러리에 구현되어있는 함수들을 이용하여 SURF나 FAST특징점을 추출하고 있었습니다. 예를들어 CVCamera.java를 살펴보면 processor.detectAndDrawFeatures(idx, pool, cvcamera.DETECT_FAST); 라는 코드가 있고 이 코드는 Processor.java파일의 cvcameraJNI.Processor_detectAndDrawFeatures(swigCPtr, this, idx, image_pool.getCPtr(pool), pool, feature_type); 이는 또 cvcameraJNI.java의 public final static native int DETECT_FAST_get(); 으로 네이티브 함수를 호출하고있었습니다. 제가 이해한 바로는 DETECT_FAST_get() 이부분이 android-opencv 라이브러리에 이 정보들이 집약되어있고 $sh build.sh 명령을 내릴때 생기는걸로 알고있습니다. 그리고 이 라이브러리 파일은 빌드시에 JNI파일을 컴파일,빌드하는걸로 알고있구요. 문제는 이 네이티브 함수가 호출되는 cpp나 c파일로 가서 어떤형식으로 구현되있는지 알고싶은데 어딨는지 모르겠습니다...ㅠ_ㅠ 하물며 android-opencv포팅시 어디에 이러한 네이티브 함수가 위치해있는지, 그리고 어떤 파라미터를 받고 넘기는지에대한 레퍼런스를 보고싶은데 구글링해봐도 어딨는지 모르겠습니다 ㅠ 혹시 이 문제에 대해 알고계시면 답변부탁드립니다.ㅠ_ㅠ 제가 궁극적으로 만들고싶은 프로젝트는 opencv를 이용한 객체추적인데 SURF는 너무 느리더군요ㅠ 그래서 FAST알고리즘을 사용하려 하는데 FAST알고리즘으로 객체추적이 가능할까요? 질문을 요약해보자면 1.public final static native int DETECT_FAST_get(); 으로 선언되있는 부분을 제가 작성해야하나요? 제가 생각하기론 포팅시에 생기는 라이브러리인 libopencv.so 파일에 그 정보가 다 담겨져있고 가져다가 쓰는걸로 아는데 제가 잘못알고있는건가요?^^; 분명 코드어딘가에 작성되있을텐데 그부분은 어디있나요?JNI파일 다 뒤져서 찾아봐도 없네요ㅠ_ㅠ 2.안드로이드하고는 관계없지만 SURF알고리즘대신 FAST알고리즘으로 객체추적이 가능할까요? 긴글 읽어주셔서 감사합니다.~! 답변 감사히 받겠습니다~!^^




1번만 답해드릴께요.
JNI 래퍼 루틴들은 swig 라는 프로그램이 만듭니다.
swig 는 C/C++ 코드들과 java(jni), python, perl 등을 연동해주는 코드들을 생성해 주는 툴입니다.
그리고, android-opencv 버전에 따라 생성되는 파일 위치가 다른데요.
예전 android-opencv 소스에서는 CVCamera/jni/gen 아래에 cvcamera_swig.cpp 라는 이름으로 만들어지고
android-experimental (http://opencv.willowgarage.com/wiki/AndroidExperimental 참고) 소스인 경우
<CVCamera 빌드 디렉토리>/jni 에 cvcameraJAVA_wrap.cxx 라는 이름으로 만들어집니다.
DETECT_FAST 는 알고리즘 번호만 결정하는 거고, 실제 opencv 알고리즘은 Processor.h 에 정의된 대로
cv::StarFeatureDetector stard;
cv::FastFeatureDetector fastd;
cv::SurfFeatureDetector surfd;
이 객체들이 Processor::detectAndDrawFeatures 메소드(Processor.cpp) 에서 실행되는 거죠.
실제 이 알고리즘들은 <opencv 소스 디렉토리>/modules/features2d/src 디렉토리에 있습니다.