OpenCV: "BruteForceMatcher": undeclared identifier

I am using OpenCV 2.4.3 and I am trying to call BruteForceMatcher, but I am getting this error:

1>------ Build started: Project: pixelTracking, Configuration: Debug Win32 ------ 1>Compiling... 1>main.cpp 1>d:\myproject\opencv\belajar\pixeltracking\pixeltracking\main.cpp(58) : error C2065: 'BruteForceMatcher' : undeclared identifier 1>d:\myproject\opencv\belajar\pixeltracking\pixeltracking\main.cpp(58) : error C2275: 'cv::L2<T>' : illegal use of this type as an expression 1> with 1> [ 1> T=float 1> ] 1>d:\myproject\opencv\belajar\pixeltracking\pixeltracking\main.cpp(58) : error C2065: 'matcher' : undeclared identifier 1>d:\myproject\opencv\belajar\pixeltracking\pixeltracking\main.cpp(61) : error C2065: 'matcher' : undeclared identifier 1>d:\myproject\opencv\belajar\pixeltracking\pixeltracking\main.cpp(61) : error C2228: left of '.match' must have class/struct/union 1> type is ''unknown-type'' 1>Build log was saved at "file://d:\myproject\OPENCV\belajar\pixelTracking\pixelTracking\Debug\BuildLog.htm" 1>pixelTracking - 5 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

My code is:

 #include <iostream> #include <vector> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/nonfree/features2d.hpp> #include <opencv2/features2d/features2d.hpp> int main() { // Read input images cv::Mat image1= cv::imread("../gambar1.jpg",0); cv::Mat image2= cv::imread("../gambar2.jpg",0); if (!image1.data || !image2.data) return 0; // Display the images cv::namedWindow("Right Image"); cv::imshow("Right Image",image1); cv::namedWindow("Left Image"); cv::imshow("Left Image",image2); // vector of keypoints std::vector<cv::KeyPoint> keypoints1; std::vector<cv::KeyPoint> keypoints2; // Construction of the SURF feature detector cv::SurfFeatureDetector surf(3000); // Detection of the SURF features surf.detect(image1,keypoints1); surf.detect(image2,keypoints2); std::cout << "Number of SURF points (1): " << keypoints1.size() << std::endl; std::cout << "Number of SURF points (2): " << keypoints2.size() << std::endl; // Draw the kepoints cv::Mat imageKP; cv::drawKeypoints(image1,keypoints1,imageKP,cv::Scalar(255,255,255),cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS); cv::namedWindow("Right SURF Features"); cv::imshow("Right SURF Features",imageKP); cv::drawKeypoints(image2,keypoints2,imageKP,cv::Scalar(255,255,255),cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS); cv::namedWindow("Left SURF Features"); cv::imshow("Left SURF Features",imageKP); // Construction of the SURF descriptor extractor cv::SurfDescriptorExtractor surfDesc; // Extraction of the SURF descriptors cv::Mat descriptors1, descriptors2; surfDesc.compute(image1,keypoints1,descriptors1); surfDesc.compute(image2,keypoints2,descriptors2); std::cout << "descriptor matrix size: " << descriptors1.rows << " by " << descriptors1.cols << std::endl; // Construction of the matcher BruteForceMatcher<cv::L2<float>> matcher; // Match the two image descriptors std::vector<cv::DMatch> matches; matcher.match(descriptors1,descriptors2, matches); std::cout << "Number of matched points: " << matches.size() << std::endl; std::nth_element(matches.begin(), // initial position matches.begin()+24, // position of the sorted element matches.end()); // end position // remove all elements after the 25th matches.erase(matches.begin()+25, matches.end()); cv::Mat imageMatches; cv::drawMatches(image1,keypoints1, // 1st image and its keypoints image2,keypoints2, // 2nd image and its keypoints matches, // the matches imageMatches, // the image produced cv::Scalar(255,255,255)); // color of the lines cv::namedWindow("Matches"); cv::imshow("Matches",imageMatches); cv::waitKey(); return 0; int size=7; cv::Mat imaf1; image1.convertTo(imaf1,CV_32F); cv::Mat imaf2; image2.convertTo(imaf2,CV_32F); cv::waitKey(); return 0; } 
+4
source share
3 answers

In opencv 2.4, BruteForceMatcher no longer called similar. You can enable legacy.hpp to use things from previous versions of openCV. BruteForceMatcher now BFMatcher

See the documentation .

+7
source
 #include <opencv2/legacy/legacy.hpp> 

Use this line. It will continue to work.

+6
source

you can add one line code:

 #include<opencv2/legacy/legacy.hpp> 

enjoy your opencv.

+1
source

All Articles