If you’ve had a chance to play around with OpenCV 3 (and do a lot of work with keypoint
If you’ve had a chance to play around with OpenCV 3 (and do a lot of work with keypoint detectors and feature descriptors) you may have noticed that the SIFT and SURF implementations are no longer included in the OpenCV 3 library by default.
Unfortunately, you probably learned this lesson the hard way by opening up a terminal, importing OpenCV, and then trying to instantiate your favorite keypoint detector, perhaps using code like the following: Where did SIFT and SURF go in OpenCV 3? Shell 1 2 3 4 5 6 $ python >>> import cv2 >>> detector = cv2 .FeatureDetector_create ( "SIFT" ) Traceback ( most recent call last ) : File "<stdin>" , line 1 , in < module > AttributeError : 'module' object has no attribute 'FeatureDetector_create'
Oh no! There is no longer a cv2.FeatureDetector_create method!
The same is true for our cv2.DescriptorExtractor_create function as well: Where did SIFT and SURF go in OpenCV 3? Shell 1 2 3 4 >>> extractor = cv2 .DescriptorExtractor_create ( "SIFT" ) Traceback ( most recent call last ) : File "<stdin>" , line 1 , in < module > AttributeError : 'module' object has no attribute 'DescriptorExtractor_create'
Furthermore, cv2.SIFT_create and cv2.SURF_create will fail as well: Where did SIFT and SURF go in OpenCV 3? Shell 1 2 3 4 5 6 7 8 >>> cv2 .SIFT_create ( ) Traceback ( most recent call last ) : File "<stdin>" , line 1 , in < module > AttributeError : 'module' object has no attribute 'SIFT_create' >>> cv2 .SURF_create ( ) Traceback ( most recent call last ) : File "<stdin>" , line 1 , in < module > AttributeError : 'module' object has no attribute 'SURF_create'
I’ll be honest — this had me scratching my head at first. How am I supposed to access SIFT, SURF, and my other favorite keypoint detectors and local invariant descriptors ifcv2.FeatureDetector_create and cv2.DescriptorExtractor_create have been removed?
The cv2.FeatureDetector_create and cv2.DescriptorExtractor_create were (and still are) methods I used all the time. And personally, I really liked the OpenCV 2.4.X implementation. All you needed to do was pass in a string and the factory method would build the instantiation for you. You could then tun