我在JNI cpp文件中生成了以下方法,
JNIEXPORT void JNICALL Java_com_idesign_opencvmaketest_MainActivity_train
(JNIEnv *env, jobject thisObj, jobjectArray images, jobjectArray labels) {
Ptr<LBPHFaceRecognizer> model = LBPHFaceRecognizer::create();
/** make a call to
* CV_WRAP virtual void train(InputArrayOfArrays src, InputArray labels) = 0;
**/
model->train(images, labels);
}
现在我要
了参数类型不匹配:类型&#39; const _InputArray&#39;和&#39; jobjectArray&#39; 不兼容
images
和labels
model->train(images, labels);
那么MainActivity_train
方法中图像和标签的参数类型是什么?
还有如何使用正确的参数类型从Java类调用此JNI方法?
我是OpenCv和JNI的新手。
答案 0 :(得分:1)
jobjectArray
不是Mat
。 org.opencv.core.Mat
类具有返回类型为getNativeObjAddr()
的{{1}}方法,可以将其解释为指向long
的指针。有关OpenCV Java API here的更多信息,示例代码here。
方法
Mat
将CV_WRAP virtual void train(InputArrayOfArrays src, InputArray labels)
作为来源,将std::vector<cv::Mat> images
作为标签。因此,据我所知,您需要将多个图像传递给std::vector<int> lables
方法。请参阅示例here。
JNI