Quantcast
Channel: OpenCV Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 41027

opencv SRUF implementation in java

$
0
0
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

Viewing all articles
Browse latest Browse all 41027

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>