当前位置: 首页 > 面试题库 >

SURF和SIFT算法在OpenCV 3.0 Java中不起作用

酆茂才
2023-03-14
问题内容

我在Java中使用的是OpenCV 3.0(最新版本),但是当我使用SURF算法或SIFT算法时,它不起作用并抛出Exception,该异常表示:
OpenCV Error: Bad argument (Specified feature detector type is not supported.) in cv::javaFeatureDetector::create

我已经用谷歌搜索过,但是对这类问题的回答并不能解决我的问题。如果有人知道这个问题,请告诉我。

提前致谢!

更新: 第三行下面的代码引发异常。

        Mat img_object = Imgcodecs.imread("data/img_object.jpg");
        Mat img_scene = Imgcodecs.imread("data/img_scene.jpg");

        FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF);
        MatOfKeyPoint keypoints_object = new MatOfKeyPoint();
        MatOfKeyPoint keypoints_scene = new MatOfKeyPoint();

        detector.detect(img_object, keypoints_object);
        detector.detect(img_scene, keypoints_scene);

问题答案:

如果从源代码编译OpenCV,则可以自己编辑opencv / modules / features2d / misc / java / src / cpp
/ features2d_manual.hpp来修复缺少的绑定。

我通过以下更改对其进行了修复:

(line 6)
#ifdef HAVE_OPENCV_FEATURES2D
#include "opencv2/features2d.hpp"
#include "opencv2/xfeatures2d.hpp"
#include "features2d_converters.hpp"

...(line 121)
    case SIFT:
    fd = xfeatures2d::SIFT::create();
    break;
    case SURF:
    fd = xfeatures2d::SURF::create();
    break;

...(line 353)
    case SIFT:
        de = xfeatures2d::SIFT::create();
        break;
    case SURF:
        de = xfeatures2d::SURF::create();
        break;

唯一的要求是您与源一起构建opencv_contrib可选模块(您可以从https://github.com/Itseez/opencv_contrib下载git项目,并仅在opencv的ccmake设置上设置其本地路径。

哦,请记住,SIFT和SURF是非免费软件^^;



 类似资料:
  • 问题内容: 我正在尝试一个简单的事情 并得到这个错误 我不明白,因为安装了cv2。 是 我的系统是Ubuntu 12.04。 也许有人遇到了同样的问题,可以帮助我。 编辑: 长话短说, testypypypypy.py : 错误: 如果我接受它是因为存在,但是如果我也接受,则会遇到相同的错误…因此它丢失了,我必须添加它,但我不知道如何。 问题答案: 我认为这远非“正确”的方法(Ubuntu上的“正

  • 我正在为一个学校项目创建一个游戏,我想将Dijkstra的算法作为AI的一部分,用于玩家需要躲避的对象。 所以我有一个图(一个邻接矩阵),我想使用Dijkstra来获得从每个对象到玩家的路径,但是现在当我调用算法时,如果玩家在对象之后,它将不会找到玩家。 在我的理解中,Dijkstra的算法应该访问所有节点,直到它找到目的地,但在我的情况下没有。 到目前为止,我的算法是这样的: 在这种情况下, 是

  • 所以我需要邮递员的文件。问题是我的API需要身份验证,所以我不能使用Swagger来测试它们。当我从控制器中删除授权并使用Swagger时,它会工作,但使用Postman时,它会返回以下错误。 请求的邮递员标题:

  • 问题内容: 我正在随处使用,并且可以在Firefox上正常使用。它不再与IE9一起工作,也不再在IE8中工作。我能做什么? 问题答案: 为什么要依赖具有对象的浏览器,而不是只包含Douglas Crockford的脚本文件。您可以在这里找到缩略文件:http : //www.json.org/js.html 导入后,您不必担心浏览器中现有的方法。

  • 使用objectClass“inet orgPerson”和“person”在people组中创建一个person。并命名为“Joe” 创建一个名为“group of Names”的组,名为“Agent”。成员属性的值为'uid=joe,ou=people,dc=company,dc=com' 现在,当我查看person'Joe'时,我找不到Apache ldap Studio中启用了'Shoin

  • 我正在使用演示APi(http://dummy.restapiexample.com/update) 我有一个响应类UpdateResponse 我有一个Api类和一个APIInterface 和对话框而不是主活动 在APIInterface中使用PUT方法有一个@path(id)和三个@fields(name、salary、age) 下面是UpdateResponse类代码 Api接口代码如下