I am getting error message while using surf in javacv , how to fix it.
here is error message.
OpenCV Error: Bad argument (Specified feature detector type is not supported.) in cv::javaFeatureDetector::create, file c:\builds\master_packslaveaddon-win64-vc12-static\opencv\modules\features2d\misc\java\src\cpp\features2d_manual.hpp, line 155
Exception in thread "AWT-EventQueue-0" CvException [org.opencv.core.CvException: cv::Exception: c:\builds\master_packslaveaddon-win64-vc12-static\opencv\modules\features2d\misc\java\src\cpp\features2d_manual.hpp:155: error: (-5) Specified feature detector type is not supported. in function cv::javaFeatureDetector::create
here is my code:
opencv_core.CvMat scene_filename =opencv_highgui.cvLoadImageM("test3.png");
Mat img_scene = new Mat(scene_filename.size());
opencv_core.CvMat object_filename =opencv_highgui.cvLoadImageM("test_in_scene.png");
Mat img_object = new Mat(object_filename.size());
//IplImage img_test_object=cvLoadImage("test.png");
//IplImage img_test_scene=cvLoadImage("test_in_scene.png");
//Step 1: Detect the keypoints using SURF Detector
int minHessian = 400;
// opencv_stitching.SurfFeaturesFinder detector=minHessian;
FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF);
//keypoint detection for both images (keyponts_scene for img_scene, keypoint_object for img_object)
MatOfKeyPoint keypoints_object = new MatOfKeyPoint();
MatOfKeyPoint keypoints_scene = new MatOfKeyPoint();
detector.detect(img_object, keypoints_object);
detector.detect(img_scene, keypoints_scene);
System.out.println("OK: " + keypoints_object.total());
System.out.println("SK: " + keypoints_scene.total());
///Step 2: Calculate descriptors (feature vectors)
DescriptorExtractor extractor = DescriptorExtractor.create(2); //2 = SURF;
Mat descriptor_object = new Mat();
Mat descriptor_scene = new Mat() ;
//Compute descriptors
extractor.compute(img_object, keypoints_object, descriptor_object);
extractor.compute(img_scene, keypoints_scene, descriptor_scene);
//-- Step 3: Matching descriptor vectors using FLANN matcher
DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.FLANNBASED); // 1 = FLANNBASED
matcher.clear();
MatOfDMatch matches = new MatOfDMatch();
//match both descriptors
matcher.match(descriptor_object, descriptor_scene, matches);
//-- Quick calculation of max and min distances between keypoints
List matchesList = matches.toList();
Double max_dist = 0.0;
Double min_dist = 100.0;
for(int i = 0; i < descriptor_object.rows(); i++){
Double dist = (double) matchesList.get(i).distance;
if(dist < min_dist) min_dist = dist;
if(dist > max_dist) max_dist = dist;
}
//-- Draw only "good" matches (i.e. whose distance is less than 3*min_dist )
LinkedList good_matches = new LinkedList();
MatOfDMatch gm = new MatOfDMatch();
//good match = distance > 2*min_distance ==> put them in a list
for(int i = 0; i < descriptor_object.rows(); i++){
if(matchesList.get(i).distance < 2*min_dist){
good_matches.addLast(matchesList.get(i));
}
}
//List -> Mat
gm.fromList(good_matches);
//-- Get the keypoints from the good matches
Mat img_matches = new Mat();
//filter keypoints (use only good matches); First in a List, iterate, afterwards ==> Mat
LinkedList objList = new LinkedList();
LinkedList sceneList = new LinkedList();
List keypoints_objectList = keypoints_object.toList();
List keypoints_sceneList = keypoints_scene.toList();
for(int i = 0; i
↧