小编Jua*_*che的帖子

在Android上使用OpenCV将cv :: Mat传递给JNI时出错

我正在使用OpenCV和JNI开发一个Android项目.

其实我正在改变面部检测样本.

我遇到的问题是,当我传递一个cv :: Mat引用时,它会给出一些strane输出并且传递不好.

为了让你处于这种状况,我在我的FdActivity.java中有这个,这是我的Android应用程序的主要活动:

 public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    rgb = inputFrame.rgba();
    Mat res = mNativeDetector.process(rgb);
    return res;
}
Run Code Online (Sandbox Code Playgroud)

过程函数是这样的:

public Mat process(Mat rgb) {
    Mat n = null;
    if(rgb.empty()) {
        System.out.println("Empty Image");
    }
    else {
        System.out.println("The image is " + rgb.rows() + "x" + rgb.cols());
        n = nativeSkinFilter(mNativeObj, rgb.getNativeObjAddr());
    }   
    return n;
}
Run Code Online (Sandbox Code Playgroud)

其中nativeSkinFilter是具有此声明的本机函数

private static native Mat nativeSkinFilter(long thiz, long inputImage);
Run Code Online (Sandbox Code Playgroud)

在C++方面,我有函数声明(DetectionBasedTracker.h):

JNIEXPORT jlong JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeSkinFilter (JNIEnv *, jclass, jlong);
Run Code Online (Sandbox Code Playgroud)

我唯一想做的就是返回相同的图像,只需通过C++函数(一旦我知道我可以正确传递矩阵就会出现更复杂的实现),所以代码就像这样(DetectionBasedTracker.cpp) :

JNIEXPORT jlong JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeSkinFilter …
Run Code Online (Sandbox Code Playgroud)

c++ java-native-interface opencv parameter-passing mat

5
推荐指数
1
解决办法
2032
查看次数