android中使用java的非自由(SIFT,SURF)用法

时间:2014-02-20 22:50:40

标签: java android opencv surf sift

我在android中使用非自由的methdos有问题。 Opencv-android-2.4.8中不包含SIFT和SURF方法。他们需要单独遵守。

https://sites.google.com/site/wghsite/technical-notes/sift_surf_opencv_android

这是关于非自由模块编译的主要教程。但是,不包括java用户的jni部分。我已经搜索了如何使用已编译的.so库但我无法实现。

我想知道有人可以分享非自由模块的jni部分或者它的详细解释,因为我在一个星期内处理这个问题并且我做不到。

感谢。

4 个答案:

答案 0 :(得分:2)

我是本教程的作者。我将添加另一个显示JNI部分的教程。希望有所帮助。请在接下来的几天内返回并查看教程。我很快就会发布。

答案 1 :(得分:1)

我解决了这个问题。当您按照教程(问题中给出的链接)进行操作时,您将获得必要的库(.so文件)。为了在java中使用它们,您不需要实现jni部分。当您在Java代码(System.load(libraryName))中加载库时,您可以使用筛选和冲浪方法,如其他检测器或描述符。您可以直接使用opencv-2.4.8提供的代码模式。

答案 2 :(得分:1)

假设您已经使用OpenCV 4 Android在您的Android设备上运行;

1)我在你的平台的正确文件夹中放置了libnonfree.so,libopencv_java.so和libgnustl_shared.so(不确定是否需要最后一个),在我的例子中是jniLibs / armeabi-v7a。已编译的版本可在此处的demo文件夹中找到; https://github.com/bkornel/opencv_android_nonfree

2)确保加载两个库。

static {
    System.loadLibrary("opencv_java");
    System.loadLibrary("nonfree");
}

这就是为了让它为我工作所需要的一切。

答案 3 :(得分:0)

@fetifati,你的意思是说如果我在lib / armeabi文件夹中复制libnonfree.so和libopencv_java.so并执行System.load(" nonfree"); System.load(" opencv_java"),我可以使用如下代码:

private static final FeatureDetector detector = FeatureDetector
        .create(FeatureDetector.SIFT);
private static final DescriptorExtractor extractor = DescriptorExtractor
        .create(DescriptorExtractor.SIFT);
直接? ......它似乎对我不起作用。我收到了一些错误。