首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Mat对象从jni返回到java

将Mat对象从jni返回到java
EN

Stack Overflow用户
提问于 2014-01-29 19:17:02
回答 1查看 610关注 0票数 0

有人能帮我把对象数组从原生c返回到java吗?我完成了它的大部分,只是我需要设置Mat字段。

getFaces()函数应该返回一个Face[]数组。Face对象包含opencv.core.Rectopencv.core.Matintintint fields

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2014-01-29 22:55:25

如果我是你,我不会返回cv::Mat数组。我每次都会返回一个cv::Mat,并在Java端根据需要多次调用该函数来创建数组。

所以基本上,我会有一个函数来获取数组的大小。以及另一个从face容器中获取面部图像的函数。

如果您不知道如何返回cv::Mat,请让我知道。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21429455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档