Ich verstehe nicht, wie kann ich eine native Methode erstellen, die eine Mat nehmen und es modifiziert zurückgeben.undefined Symbol mit lib erstellt mit jni und OpenCV
Ich habe diesen Code in Java-Klasse:
private native void getCanny(long mat);
getCanny(mat.getNativeObjAddr());
und die Mat2Image.h generiert:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Mat2Image */
#ifndef _Included_Mat2Image
#define _Included_Mat2Image
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Mat2Image
* Method: getCanny
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_Mat2Image_getCanny
(JNIEnv *, jobject, jlong);
#ifdef __cplusplus
}
#endif
#endif
und das ist die CPP ich gemacht habe:
#include "Mat2Image.h"
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc.hpp>
JNIEXPORT void JNICALL Java_Mat2Image_getCanny
(JNIEnv * env, jobject obj, jlong matr){
cv::Mat* frame=(cv::Mat*)matr;
cv::cvtColor(*frame, *frame, CV_BGR2GRAY);
cv::GaussianBlur(*frame, *frame, cv::Size(7,7), 1.5, 1.5);
cv::Canny(*frame, *frame, 0, 30, 3);
}
aber wenn ich versuche, die Methode auszuführen, habe ich diesen Fehler:
/usr/lib/jvm/jdk1.8.0_111/bin/java: symbol lookup error: /home/buzzo/Downloads/helloJni-master/jni/libMat.so: undefined symbol: _ZN2cv8cvtColorERKNS_11_InputArrayERKNS_12_OutputArrayEii
Was genau ist das Problem mit dem oben genannten? –
der .cpp-Code funktioniert nicht, ich verstehe nicht, wie man es gemacht –
Nun, ich vermutete, dass der CPP-Code nicht funktioniert hat, nur nach der Tatsache zu urteilen, dass diese Frage an erster Stelle steht. Aber wir brauchen mehr Details. Was erwartest du von ihm? Warum erwartest du das? Was macht es eigentlich? Ohne diese Details können wir Ihnen nicht helfen. –