SURF和SIFT算法在OpenCV 3.0 Java中不起作用
问题内容:
我在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是非免费软件^^;