2014-01-29 3 views
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; 
} 

답변

0

, 내가 cv::Mat 배열을 반환하지 않을 것입니다. 나는 한 번만 cv::Mat을 반환하고 필요한만큼 여러 번 함수를 호출하여 Java 측에서 배열을 생성합니다.

기본적으로 배열의 크기를 가져 오는 함수가 있습니다. 그리고 얼굴 컨테이너에서 얼굴 이미지를 얻는 또 다른 기능.

반환 방법을 모르면 cv::Mat 알려주세요.

희망이 도움이됩니다.

관련 문제