[MacPorts] #61415: The opencv package needs to be compile with the OPENCV_ENABLE_NONFREE CMake flag

MacPorts noreply at macports.org
Sun Nov 8 09:39:14 UTC 2020


#61415: The opencv package needs to be compile with the OPENCV_ENABLE_NONFREE CMake
flag
-----------------------------+--------------------
 Reporter:  ifernandolopez   |      Owner:  (none)
     Type:  defect           |     Status:  new
 Priority:  Normal           |  Milestone:
Component:  ports            |    Version:
 Keywords:  opencv, contrib  |       Port:  opencv
-----------------------------+--------------------
 opencv compile properly with the contrib variant:

 sudo port install opencv @+java+python37+contrib

 However, the library fails in runtime when you aim to use SURF/SIFT with
 this this very clarifying message:

 opencv_contrib-3.4.10/modules/xfeatures2d/src/surf.cpp:1029: error:
 (-213:The function/feature is not implemented) This algorithm is patented
 and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake
 option and rebuild the library in function 'create'


 Is it possible to ask the maintainer to add this CMake flag to the contrib
 variant:

 -D OPENCV_ENABLE_NONFREE=ON

 PS: The library compiles fine and does not fail until you use a non free
 feature in runtime. I am attaching a source code for the maintainer that
 demonstrates it:


 {{{
 #include <iostream>
 #include <opencv2/opencv.hpp>
 #include <opencv2/xfeatures2d/nonfree.hpp>

 int main(int argc, const char * argv[]) {
   cv::Mat im1 = cv::imread("view1.jpg", CV_LOAD_IMAGE_COLOR);
   cv::Mat im2 = cv::imread("view2.jpg", CV_LOAD_IMAGE_COLOR);
   if (im1.empty() || im2.empty()) {
     std::cout << "Error loading image" << std::endl;
     return 1;
   }
   // Define features detector
   cv::Ptr<cv::Feature2D> detector; // Generic detectior
   int hessian_threshold = 100;
   detector = cv::xfeatures2d::SURF::create(hessian_threshold);
   // Detect the keypoints
   std::vector<cv::KeyPoint> keypoints1, keypoints2;
   detector->detect(im1, keypoints1);
   detector->detect(im2, keypoints2);
   // Compute the keypoints descriptors
   cv::Mat descriptors1, descriptors2;
   detector->compute(im1, keypoints1, descriptors1);
   detector->compute(im2, keypoints2, descriptors2);
   // Compute the matches
   cv::BFMatcher matcher(cv::NORM_L2);
   std::vector<cv::DMatch> matches;
   matcher.match(descriptors1, descriptors2, matches);
   // Sort the 25th best matches at the beggining, and remove the rest
   std::nth_element(matches.begin(), matches.begin()+25, matches.end());
   matches.erase(matches.begin()+25, matches.end());
   // Show results
   cv::Mat im_matches;
   cv::drawMatches(im1, keypoints1, im2, keypoints2, matches, im_matches);
   cv::imshow("Matches", im_matches);
   cv::waitKey(0);
   return 0;
 }

 }}}

 Here I am also attaching related information in Homebrew:

 https://www.pyimagesearch.com/2018/08/17/install-opencv-4-on-macos/

-- 
Ticket URL: <https://trac.macports.org/ticket/61415>
MacPorts <https://www.macports.org/>
Ports system for macOS


More information about the macports-tickets mailing list