3

我正在尝试在我的项目中实现关于人脸识别的 SURF 功能。我是 android 上的 opencv 新手。所以很难找到逻辑错误。我也尝试从谷歌搜索,但我无法修复。我导入了 libray org.opencv.features2d 来处理功能问题。

一开始这是我的SURF实现代码(一部分)。

    public void SURFExtraction()
{
    FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF);
    DescriptorExtractor SurfExtractor = DescriptorExtractor.create(DescriptorExtractor.SURF);

     Mat img1 = Highgui.imread("/mnt/sdcard/FaceDB/1.jpg");//one of my face
     Mat img2 = Highgui.imread("/mnt/sdcard/FaceDB/2.jpg");//one of my different face

    //extract keypoints
    MatOfKeyPoint keypoints = new MatOfKeyPoint();
    MatOfKeyPoint logoKeypoints = new MatOfKeyPoint();

     detector.detect(img1, keypoints);//this is the problem "fatal signal"
     Log.d("LOG!", "number of query Keypoints= " + keypoints.size());
     detector.detect(img2, logoKeypoints);
     Log.d("LOG!", "number of logo Keypoints= " + logoKeypoints.size());


}

当我执行程序时,它给出了一个错误。只是这个。

  A/libc(30444): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)

我搜索了这个错误。他们说当本机类尝试到达或写入 0x00000000 内存地址时会发生此错误。但我不知道如何解决这个问题。你能告诉我我能做什么吗?

提前致谢

4

3 回答 3

4

行!SURF 功能现在根据此线程获得专利。所以我认为这个问题的错误。谁曾尝试提取 SURF 特征,您可以继续使用 ORB 特征,除非匹配特征,否则在此线程中该特征可以正常工作。我希望这将有助于搜索 android SURF 特征提取。

于 2013-04-19T13:17:59.843 回答
3

SURF 不包含在 OpenCV Android 的分发包中。要使用它,您需要编译非自由模块并在您的项目中使用它。因此,您需要做的是创建一个 NDK 项目,将非自由模块编译为独立库。然后使用这个库来编译你的程序。然后你应该能够构建你的应用程序。你可以参考这个教程

于 2013-05-24T16:49:54.460 回答
0

下载旧版本,即 4.2.1 或 4.2.0 的 opencv 并将其用于您的项目

于 2014-01-07T11:49:53.747 回答