0
누군가가 원시 배열에서 Java로 객체 배열을 반환하도록 도울 수 있습니까? 큰 부분을 차지 했으므로 매트 필드 만 설정해야합니다.jni에서 Java로 Mat 객체 반환
getFaces()
함수는 Face[]
배열로 반환해야합니다. opencv.core.Rect
포함 oject 얼굴, opencv.core.Mat
, int
, int
, 내가 당신이라면 int fields
JNIEXPORT jobjectArray JNICALL Java_com_faceprocessing_PersonDetector_nativeGetFaces (JNIEnv * jenv, jclass) {
if (faceContainer.size()==0) return NULL;
jclass faceClass = jenv->FindClass("com/faceprocessing/Face");
jmethodID faceCtorID = jenv->GetMethodID(faceClass, "<init>", "()V");
jfieldID facePosID = jenv->GetFieldID(faceClass, "Position", "Lorg/opencv/core/Rect;");
jfieldID faceIDID = jenv->GetFieldID(faceClass, "PredictedID", "I");
jfieldID faceGenderID = jenv->GetFieldID(faceClass, "PredictedGender", "I");
jfieldID faceAgeID = jenv->GetFieldID(faceClass, "PredictedAge", "I");
jclass rectClass = jenv->FindClass("org/opencv/core/Rect");
jmethodID rectCtorID = jenv->GetMethodID(rectClass, "<init>", "(IIII)V");
jclass matClass = jenv->FindClass("org/opencv/core/Mat");
int correctCount = 0;
for (int i=0; i<faceContainer.size(); i++) {
Face* pFace = faceContainer.at(i);
if (!pFace->isError) correctCount++;
}
jobjectArray jFaceArray = jenv->NewObjectArray(correctCount, faceClass, NULL);
int j=0;
for (int i=0; i<faceContainer.size(); i++) {
Face* pFace = faceContainer.at(i);
if (pFace->isError) continue;
jobject jFace = jenv->NewObject(faceClass, faceCtorID);
jobject jRect = jenv->NewObject(rectClass, rectCtorID, pFace->facePosition->x, pFace->facePosition->y, pFace->facePosition->width, pFace->facePosition->height);
jenv->SetObjectField(jFace, facePosID, jRect);
jenv->SetIntField(jFace, faceIDID, pFace->predictedID);
jenv->SetIntField(jFace, faceGenderID ,pFace->predictedGender);
jenv->SetIntField(jFace, faceAgeID, pFace->predictedAge);
jenv->SetObjectArrayElement(jFaceArray,j,jFace);
j++;
}
return jFaceArray;
}