title: OpenCV: 'BruteForceMatcher' : undeclared identifier
body: <p>I'm using OpenCV 2.4.3 and I'm trying to call BruteForceMatcher, but I'm getting this error:</p>
  
  <pre><code>1&gt;------ Build started: Project: pixelTracking, Configuration: Debug Win32 ------
  1&gt;Compiling...
  1&gt;main.cpp
  1&gt;d:\myproject\opencv\belajar\pixeltracking\pixeltracking\main.cpp(58) : error C2065: 'BruteForceMatcher' : undeclared identifier
  1&gt;d:\myproject\opencv\belajar\pixeltracking\pixeltracking\main.cpp(58) : error C2275: 'cv::L2&lt;T&gt;' : illegal use of this type as an expression
  1&gt;        with 
  1&gt;        [
  1&gt;            T=float
  1&gt;        ]
  1&gt;d:\myproject\opencv\belajar\pixeltracking\pixeltracking\main.cpp(58) : error C2065: 'matcher' : undeclared identifier
  1&gt;d:\myproject\opencv\belajar\pixeltracking\pixeltracking\main.cpp(61) : error C2065: 'matcher' : undeclared identifier
  1&gt;d:\myproject\opencv\belajar\pixeltracking\pixeltracking\main.cpp(61) : error C2228: left of '.match' must have class/struct/union
  1&gt;       type is ''unknown-type''
  1&gt;Build log was saved at "file://d:\myproject\OPENCV\belajar\pixelTracking\pixelTracking\Debug\BuildLog.htm"
  1&gt;pixelTracking - 5 error(s), 0 warning(s)
  ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
  </code></pre>
  
  <p>My code:</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;vector&gt;
  #include &lt;opencv2/core/core.hpp&gt;
  #include &lt;opencv2/imgproc/imgproc.hpp&gt;
  #include &lt;opencv2/highgui/highgui.hpp&gt;
  #include &lt;opencv2/nonfree/features2d.hpp&gt;
  #include &lt;opencv2/features2d/features2d.hpp&gt;
  
  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&lt;cv::KeyPoint&gt; keypoints1;
          std::vector&lt;cv::KeyPoint&gt; 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 &lt;&lt; "Number of SURF points (1): " &lt;&lt; keypoints1.size() &lt;&lt; std::endl;
          std::cout &lt;&lt; "Number of SURF points (2): " &lt;&lt; keypoints2.size() &lt;&lt; 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 &lt;&lt; "descriptor matrix size: " &lt;&lt; descriptors1.rows &lt;&lt; " by " &lt;&lt; descriptors1.cols &lt;&lt; std::endl;
  
          // Construction of the matcher
          BruteForceMatcher&lt;cv::L2&lt;float&gt;&gt; matcher;
          // Match the two image descriptors
          std::vector&lt;cv::DMatch&gt; matches;
          matcher.match(descriptors1,descriptors2, matches);
  
          std::cout &lt;&lt; "Number of matched points: " &lt;&lt; matches.size() &lt;&lt; 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;
  }
  </code></pre>