【问题标题】:Passing "List<KeyPoint> objectKeypoints" jobject to Vector<Keypoint>in native Code在本机代码中将“List<KeyPoint> objectKeypoints”作业对象传递给 Vector<Keypoint>
【发布时间】:2012-05-17 11:16:48
【问题描述】:

我目前正在开发一个安卓应用程序。在 java 方面,我将 List&lt;KeyPoint&gt; objectKeypoints 传递给本机代码。但是如何将本机端的这个作业转换为Vector&lt;Keypoint&gt; objectKeypoints 以进行进一步处理。

示例: Java端我的调用方法:

List<KeyPoint> objKeypoints;
Mat mGrayMat = ;// is not empty;
FeatureDetector featureDetector = FeatureDetector.create(FeatureDetector.SURF);
featureDetector.detect(obj_keypoints, mGrayMat);

FindObject(objKeypoints,mGrayMat );

本机 C++ 代码;

JNIEXPORT void JNICALL Java_my_app_AndroidAppView_FindObject(JNIEnv* env, jobject obj, jobject obj_keypoints, jlong matAddrObjGray){
// How to convert obj_keypoints to Vector<KeyPoint>?
Vector<KeyPoint> objectKeypoints = ....;
Next Step is calculating the descriptors for the Keypoints.
}

【问题讨论】:

    标签: android opencv java-native-interface feature-detection


    【解决方案1】:

    你不能,除非它真的是一个向量。如果接口只指定列表,则应将其作为列表处理。如果需要 Vector,请将接口更改为需要 Vector。

    你也可以从列表中构建一个新的向量,但它看起来毫无意义地昂贵。

    【讨论】:

    • 感谢您的回复。在 Java 方面,我可以更改第一行:“List objKeypoints;”到“Vector objKeypoints;”一般来说,我不知道如何将本机端的 jobject 转换为 Vector
    • @Uniq 如果您可以更改界面,您根本不需要进行任何转换。事实上,在 JNI 中没有演员表这样的东西。您只需从声明它们的类中查找要调用的方法,然后调用它们。如果对象不属于该类,您将获得异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2012-04-20
    • 2016-06-23
    • 2013-04-07
    相关资源
    最近更新 更多