我正在使用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)