Java OpenCV到JNI如何使其工作?

Java OpenCV到JNI如何使其工作?,java,netbeans,opencv,face-detection,dll,Java,Netbeans,Opencv,Face Detection,Dll,我正试图使用opencv和java进行人脸检测,在那次购买中我发现了这个“JNI2OPENCV”文件……但我对如何使它工作感到困惑,有人能帮我吗 下面是FaceDetection.java class JNIOpenCV { static { System.loadLibrary("JNI2OpenCV"); } public native int[] detectFace(int minFaceWidth, int minFaceHeight, Str

我正试图使用opencv和java进行人脸检测,在那次购买中我发现了这个“JNI2OPENCV”文件……但我对如何使它工作感到困惑,有人能帮我吗

下面是FaceDetection.java

class JNIOpenCV {
    static {
        System.loadLibrary("JNI2OpenCV");
    }
    public native int[] detectFace(int minFaceWidth, int minFaceHeight, String cascade, String filename);
}

public class FaceDetection {
    private JNIOpenCV myJNIOpenCV;
    private FaceDetection myFaceDetection;

    public FaceDetection() {
        myJNIOpenCV = new JNIOpenCV();
        String filename = "lena.jpg";
        String cascade = "haarcascade_frontalface_alt.xml";

    int[] detectedFaces = myJNIOpenCV.detectFace(40, 40, cascade, filename);
    int numFaces = detectedFaces.length / 4;

        System.out.println("numFaces = " + numFaces);
        for (int i = 0; i < numFaces; i++) {
            System.out.println("Face " + i + ": " + detectedFaces[4 * i + 0] + " " + detectedFaces[4 * i + 1] + " " + detectedFaces[4 * i + 2] + " " + detectedFaces[4 * i + 3]);
        }
    }

    public static void main(String args[]) {
        FaceDetection myFaceDetection = new FaceDetection();   
    }
}
类JNIOpenCV{
静止的{
系统加载库(“JNI2OpenCV”);
}
公共本机int[]detectFace(int-minFaceWidth、int-minFaceHeight、字符串级联、字符串文件名);
}
公共类人脸检测{
私人JNIOpenCV myJNIOpenCV;
私有人脸检测;
公共人脸检测(){
myJNIOpenCV=新的JNIOpenCV();
字符串filename=“lena.jpg”;
字符串cascade=“haarcascade\u frontalface\u alt.xml”;
int[]detectedFaces=myJNIOpenCV.detectFace(40,40,级联,文件名);
int numface=detectedFaces.length/4;
System.out.println(“numFaces=“+numFaces”);
对于(int i=0;i
有人能告诉我如何在Netbeans上实现这一点吗??我试过谷歌,但在这个特定的主题上的帮助是非常困难的

我在netbeans项目中将整个文件夹添加为Llibrary,当我尝试运行该文件时,会得到以下警告

线程“main”java.lang.UnsatifiedLinkError中出现异常:FaceDetection.JNIOpenCV.detectFace(IILjava/lang/String;Ljava/lang/String;)[I 在FaceDetection.JNIOpenCV.detectFace(本机方法) 在FaceDetection.FaceDetection.(FaceDetection.java:19) 位于FaceDetection.FaceDetection.main(FaceDetection.java:29) Java结果:1 生成成功(总时间:2秒)


有人能告诉我使用这个的确切方法吗?比如我所要做的一切吗?

如果你在Windows上使用JNI,他将是你的朋友

但是,在开始之前,请验证JRE是否可以通过添加以下内容找到您的JNIOpenCV.dll:
System.out.println(“java.library.path=“+System.getProperty(“java.library.path”));
到静态构造函数块

但是,我认为这里的问题不是找到JNIOpenCV.dll文件,而是找到它所依赖的文件。在dependency walker中打开你的.dll(只需将它拖到那里),然后查找任何错误消息(除了msjava.dll-忽略它,这无关紧要)。很可能我的直觉是,您需要Microsoft Visual C/C++运行库,从Visual Studio网站下载它们,并将它们与dll放在同一文件夹中


祝你好运!

你应该看看这里,有几个例子与JNI有关:


我使用OpenCV 2.3.1和Eclipse而不是Netbeans创建了一个运行的Android示例


这个小的描述了一个机器人跟随手电筒。这个页面包含了必要的步骤和源代码。

嘿,非常感谢你的回复……虽然我还没有检查java.library.path内容……我在dependency walker中打开了JNI2OpenCV.dll,我能理解很多,你能在这方面帮助我吗?在这里我添加并找到了e java.library.path'java.library.path=C:\Program Files\java\jdk1.6.0\U 18\bin;C:\WINDOWS\Sun\java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32\WBEM;C:\Program Files\Intel\DMIX;C:\OpenCV2.0\bin;C:\Sun\SDK\jdk\bin;C:\Program Files\QuickTime\QTSystem\C:\Program Files\MySQL服务器5.1\bin;C:\Sun\SDK\b在“依赖项漫游器看起来不错,MSJAVA和MPR通常都有错误,因此如果其他不可见的内容都没有问题,那么一切正常。System.loadLibrary()会在上面的路径中查找库,因为dll不在那里,所以不会加载。您可以移动它或使用System.load(),它需要DLL的完整路径和文件名(以及扩展名)。