2012-11-20 4 views
1

Eclipse에서 OpenCV 및 JNI 부분을 사용하여 Android 응용 프로그램을 빌드 할 때 문제가 있습니다.Eclipse에서 JNI로 OpenCV 응용 프로그램 만들기

문제는 ndk-build가 프로젝트에서 정상적으로 실행되지만 Eclipse에서 오류 (일반적으로 코드와 관련이 없음)가 표시된다는 것입니다.

[email protected]:~/src/OpenCV-2.4.3-android-sdk/samples/tutorial-3-native$ ndk-build 
Install  : libnative_camera_r2.2.0.so => libs/armeabi-v7a/libnative_camera_r2.2.0.so 
Install  : libnative_camera_r2.3.3.so => libs/armeabi-v7a/libnative_camera_r2.3.3.so 
Install  : libnative_camera_r3.0.1.so => libs/armeabi-v7a/libnative_camera_r3.0.1.so 
Install  : libnative_camera_r4.0.0.so => libs/armeabi-v7a/libnative_camera_r4.0.0.so 
Install  : libnative_camera_r4.0.3.so => libs/armeabi-v7a/libnative_camera_r4.0.3.so 
Install  : libnative_camera_r4.1.1.so => libs/armeabi-v7a/libnative_camera_r4.1.1.so 
Install  : libnative_sample.so => libs/armeabi-v7a/libnative_sample.so 
Install  : libopencv_java.so => libs/armeabi-v7a/libopencv_java.so 

그것은 일반적으로 실행되지만 이클립스 오류를 보여줍니다 :

예를 들어, 나는 OpenCV4Android 샘플 중 하나를 짓고 있어요

'size_t' is ambiguous ' 
Candidates are: 
Field 'pt' could not be resolved 
Field 'pt' could not be resolved 
Field 'x' could not be resolved 
Field 'y' could not be resolved 
Invalid arguments ' 
Candidates are: 
void detect(const cv::Mat &, ? &, const cv::Mat &) 
void detect(const ? &, ? &, const ? &) 
The type 'cv::FastFeatureDetector' must implement the inherited pure virtual method 'cv::FeatureDetector::detectImpl' 

을 그리고 다른 프로젝트에서이 같은 다른 오류. 또한 Eclipse 인텔리 센스 (또는 제대로 호출되는 방법 :)가 .cpp 파일에서 작동하지 않습니다.

나는 프로젝트를 청소하고, obj 및 lib 폴더를 삭제하려했지만 아무런 효과가 없었습니다.

내 시스템은 우분투 12.04, OpenCV 버전은 2.4.3입니다.

도움 주셔서 감사합니다.

+1

NDK 플러그인을 설치 했습니까? http://tools.android.com/recent/usingthendkplugin –

+0

예. (확대 코멘트 : –

답변

2

우분투 12.04에서 같은 문제가 발생했습니다. OpenCV 버전은 2.4.3입니다. 정확히 같은 예제에서 나는 Eclipse-Android 번들을 사용하고있다.

는 여기에 내가했던 일이야 :

업데이트는 구글의 repo를 사용하여 NDK 플러그인은, 그것은 이미 설치되어 있지만 업데이트 할 수 있습니다.

그렇다면 size_t를 int로 변경하고 예제와 같이 곧바로 이동하지 않고 임시 변수를 추가했습니다. 코드는 다음과 같습니다.

Mat* pMatGr=(Mat*)addrGray; 
Mat* pMatRgb=(Mat*)addrRgba; 
vector<KeyPoint> v; 
FastFeatureDetector detector(50); 
detector.detect(*pMatGr, v); 
for(int i = 0; i < v.size(); i++) 
{ 
    KeyPoint tK = v[i]; 
    circle(*pMatRgb, Point(tK.pt.x, tK.pt.y), 10, Scalar(255,0,0,255)); 
} 

정말 이상한 버그입니다. 내 생각에 일식 디버그 메커니즘이 제대로 작동하지 않는 것과 관련이 있습니다.

+0

고마워, 나는 이것을 조금 나중에 시험해보고 결과를 말할 것이다. –

+0

음, NDK를 업데이트하고 Eclipse를 다시 설치했는데 모든 것이 잘되었습니다. 이상한 버그 :) 어쨌든 도와 줘서 고마워, 네 대답을 표시해. –

+0

NDK를 제거하고 다시 설치하면 "유형 'cv :: FastFeatureDetector'가 상속 된을 구현해야합니다 ..."라는 오류를 해결할 수있는 유일한 방법입니다. 그러나 jni/jni_part.cpp 파일을 열면 오류가 다시 나타납니다. 이것은 OpenCV Tutorial 3과 OpenCV Tutorial 4 모두에 해당됩니다. 그래서 여기에 일식이 깔려있는 것처럼 보입니다. – user1792609

1

그래, 아주 이상한 버그. 우분투 12.04 및 OpenCV 2.4.5를 사용하고 있습니다.

이클립스 또는 NDK를 다시 설치하지 않고 그것을 해결하기 위해 관리 -

나는 '혼합 처리 OpenCV의 튜토리얼 2'에서 동일한 버그를 얻었다. 샘플 프로젝트를 삭제 한 다음 다시 가져 왔습니다. 이제 잘 작동합니다.

관련 문제