OpenCV Java createFisherFace Ptr

OpenCV Java createFisherFace Ptr,java,opencv,pointers,Java,Opencv,Pointers,我一直在Eclipse上使用OpenCV(Java)进行开发。现在,我需要为我的FaceRecognitor类创建一个FisherFace。根据我的搜索,我发现似乎没有任何支持这一点。据我所知,这似乎与Ptr类有关。是不是Java没有一个Ptr类来处理返回的Ptr值?如果是的话,我们会处理吗?如果这不是一个解决方案,是否有任何教程可以指导我制作FaceRecognitor类?谢谢大家! > P>整个问题在C++侧,所以您的java PTR类将无法帮助。 使用opencv 2.4.8,您可以尝试重

我一直在Eclipse上使用OpenCV(Java)进行开发。现在,我需要为我的FaceRecognitor类创建一个FisherFace。根据我的搜索,我发现似乎没有任何支持这一点。据我所知,这似乎与Ptr类有关。是不是Java没有一个Ptr类来处理返回的Ptr值?如果是的话,我们会处理吗?如果这不是一个解决方案,是否有任何教程可以指导我制作FaceRecognitor类?谢谢大家!

> P>整个问题在C++侧,所以您的java PTR类将无法帮助。 使用opencv 2.4.8,您可以尝试重建jni适配器:

(注意,opencv3.0中的cv::Ptr类将与之不兼容)



稍后,可以创建面记录:



非常感谢。我该怎么做才能让它工作?我知道第二批代码用于在我的Java项目中生成类,对吗?我可以从你的第三行代码中查到。但是第一行是什么?我该如何使用它?是制作“facerec.dll”并将其复制到我的Java项目文件夹中吗?最后一个问题,FisherFace或Eigenface呢?感谢您的反馈!这真的很有帮助!1. - 您必须使用JNI和C++编译器(和OFC。OpenCV LIBS)2来构建DLL/SO。用Fisher或Egenigen替换LBPH,谢谢,最后一个问题,这在Linux和Mac下可以工作吗?我希望它至少能在Linux下工作。非常感谢。您必须为每个操作系统重建dll/so
facerec=new LBPHFaceRecognizer(8,8);材料m=材料眼(32,32,0);Mat z=Mat.零点(32,32,0);List src=new ArrayList();src.add(z);src.add(z);src.add(m);材料标签=新材料(1,3,CvType.CV_32S);int[]l={1,2,3};标签。放置(0,0,l);facerec.列车(src,标签);int[]label=新的int[1];double[]conf=新的double[1];预测(m,标签,形态);System.out.println(“rec”+标签[0]+“”+conf[0]);//rec 3 0.0
请您发布您的facerec.cpp和所有JNI注入的完整代码好吗?
// facerec.dll
#include "jni.h"
#include "opencv2/contrib/contrib.hpp"


extern "C" {


JNIEXPORT jlong JNICALL Java_org_matxx_n_createLBPHFaceRecognizer(JNIEnv* env, jclass, jint);

JNIEXPORT jlong JNICALL Java_org_matxx_n_createLBPHFaceRecognizer(JNIEnv* env, jclass, jint)
{
    try {

        cv::Ptr<cv::FaceRecognizer> ptr = cv::createLBPHFaceRecognizer();
        cv::FaceRecognizer * pf = ptr.get();
        ptr.addref(); //don't let it self-destroy here..
        return (jlong) pf;
    } catch (...) {
        jclass je = env->FindClass("java/lang/Exception");
        env->ThrowNew(je, "sorry, dave..");
    }
    return 0;
}
} // extern "C"
// LBPHFaceRecognizer.java

import org.opencv.contrib.FaceRecognizer;
import org.opencv.core.Core;


public class LBPHFaceRecognizer extends FaceRecognizer
{
    static{ System.loadLibrary("facerec.dll"); }

    private static native long n_createLBPHFaceRecognizer();

    public LBPHFaceRecognizer()
    {
        super(n_createLBPHFaceRecognizer());
    }
}
FaceRecognizer facerec = new LBPHFaceRecognizer();