OpenCV에서 (자주) 다루는 vector<Point2f> 타입의 변수의 값을 JAVA 코드로 리턴하는 방법입니다.
깔끔한 방법을 찾지 못해 정리해 둡니다^^ 아울러, 이전에 정리했던 방법에는 문제가 있어 수정본을 다시 써 놓습니다.
JAVA Code :
public native double[][] callNativeCode(long matAddrInput); Mat input = new Mat(480, 640, CV_8UC3); double[][] ret = callNativeCode(input.getNativeObjAddr());
HPP Code :
JNIEXPORT jobjectArray JNICALL Java_org_airpage_Activity_MainActivity_callNativeCode (JNIEnv *, jobject, jlong);
CPP Code :
JNIEXPORT jobjectArray JNICALL Java_org_airpage_Activity_MainActivity_callNativeCode
(JNIEnv *env, jobject instance, jlong matAddrInput) {
vector<Point2f> retapprox = someFunc();
jobjectArray result = NULL;
for (int k = 0; k < size; k++) {
jdoubleArray element = env->NewDoubleArray(2);
if (element == NULL)
break;
jdouble buf[2] = { retapprox[k].x, retapprox[k].y };
env->SetDoubleArrayRegion(element, 0, 2, buf);
env->SetObjectArrayElement(result, k, element);
}
return result;
}건투를 빕니다~!