Java OpenCV到JNI如何使其工作?
我正试图使用opencv和java进行人脸检测,在那次购买中我发现了这个“JNI2OPENCV”文件……但我对如何使它工作感到困惑,有人能帮我吗 下面是FaceDetection.javaJava 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
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的完整路径和文件名(以及扩展名)。