Android, genera archivos de encabezado jni con javah, muestra error que no puede encontrar org.opencv.core.Mat
Sólo tengo un problema molesto con jni cuando compilar el método nativo en la clase java con javah
para generar archivos de encabezado JNI.
Si la clase ha utilizado un paquete de terceros, Por ejemplo: org.opencv.core.Mat, entonces el javah
mostrará el error que no puede encontrar la clase org.opencv.core.Mat.
- Android Studio, Gradle, OpenCV y NDK
- Sugerencias para el reconocimiento de dígitos
- Referencia indefinida a 'cv :: initModule_nonfree ()' En Android
- Reconocimiento de imágenes con SURF con OpenCV en Android
- Reconocimiento de rostro inestable con OpenCV
El código de ejemplo de OpenCV como se muestra a continuación:
package org.opencv.samples.fd; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; public class DetectionBasedTracker { public DetectionBasedTracker(String cascadeName, int minFaceSize) { mNativeObj = nativeCreateObject(cascadeName, minFaceSize); } public void start() { nativeStart(mNativeObj); } public void stop() { nativeStop(mNativeObj); } public void setMinFaceSize(int size) { nativeSetFaceSize(mNativeObj, size); } public void detect(Mat imageGray, MatOfRect faces) { nativeDetect(mNativeObj, imageGray.getNativeObjAddr(), faces.getNativeObjAddr()); } public void release() { nativeDestroyObject(mNativeObj); mNativeObj = 0; } private long mNativeObj = 0; private static native long nativeCreateObject(String cascadeName, int minFaceSize); private static native void nativeDestroyObject(long thiz); private static native void nativeStart(long thiz); private static native void nativeStop(long thiz); private static native void nativeSetFaceSize(long thiz, int size); private static native void nativeDetect(long thiz, long inputImage, long faces); }
Primero, utilicé el comando
javah -classpath bin/classes -bootclasspath (the directory of android.jar) -d jni (packageName + ClassName) , shows the error "can't find the org.opencv.core.Mat
Entonces modifiqué el comando para
javah - classpath bin/classes - bootclasspath (the dir of android.jar) ; (the dir of the opencv lib jar) -d jni ..." ", this time it shows error
Excepción
Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: E:\Computer_Language\Java\soft_android\OpenCV-2.4.3-rc-android-sdk\OpenCV -2.4.3-rc-android-sdk\sdk\java\bin\opencv library - 2.4.3.jar at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:177) at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68) at com.sun.tools.javah.JavahTask.run(JavahTask.java:509) at com.sun.tools.javah.JavahTask.run(JavahTask.java:335) at com.sun.tools.javah.Main.main(Main.java:46)
Creo que agregar el directorio de opencv lib en -bootclasspath
es útil y necesario. El error es porque acabo de agregar dos camino en -bootclasspath
o el formato es algo malo?
Realmente confundido. ¡Por favor dé una cierta ayuda, gracias u!
- Cómo obtener GNU C en las preferencias
- Descripción de SURF más rápido con la detección de FAST?
- No se puede reanudar la actividad en orden aleatorio
- Imprimir contenido de matriz opencv en Java
- OpenCV para Android - NativeCameraView todavía existe?
- OpenCV: Optimización del cálculo del flujo óptico
- Android Studio no puede encontrar los módulos opencv, pero compila ok
- ¿Es posible hacer zoom y enfocar usando OpenCV en Android?
Esto es lo que hice:
1.Open La línea de comandos, escriba a (proyecto) / bin / classes: 2.type: javah -classpath (vía de acceso sdk de opencv4android) / java / bin / classes: (su ubicación del proyecto) / bin / classes -jni (your java Class que contiene las interfaces nativas de la biblioteca)
En mi proyecto. Yo si:
Javah -classpath / home / zijun / Dev / adt / OpencvAndroid / sdk / java / bin / classes: / home / zijun / espacio de trabajo / LocTM / bin / classes -jni com.brainport.loctm.TMatching
Que funciona en Linux Ubuntu 12.04.02 64bit OS
Me encontré con el mismo problema también, me costó medio día. Sólo copiar DetectionBasedTracker.java a mi poject.I utilizar Android Studio.When uso ExternalTools> javah para generar archivos .h, la consola de impresión no puede encontrar org.opencv.core .Mat.copying mat.java y matofRect.java al directorio DetectionBasedTracker.java existe sólo causa más java clase no puede ser find.finally, encuentro que este problema fue causado por la cláusula de importación * en java file.and rara vez usamos java class En el método nativo que definimos. Así que cortar estos métodos java y obtuvo esto:
package cn.ntu.tonguefur.nativemethod; public class DetectionBasedTracker{ private static native long nativeCreateObject(String cascadeName,int minFaceSize); //Other native methods private static native void nativeDetect(long thiz,long inputImage,long faces); }
Ahora puede utilizar libremente el comando javah para generar el archivo .h. Después de eso, agregue los métodos java y los paquetes de importación que necesita.
- Repetición de mapa de bits + esquinas redondeadas
- ¿Cómo puedo crear un "complemento de licencias" para mi aplicación de Android?