今までOpenCV 3.4.0を使用していたのですが、最近OpenCV 3.4.3にバージョンアップしました。バージョンアップ後にSIFTを使おうとするとちょっとハマったのでメモです。
現象
SIFTを使いたかったので、OpenCVのopencv_contribも一緒にビルドしました。しかし、いざSIFTを使ったプログラムを動かそうとすると、こんなエラーが表示され、SIFTを使えませんでした。
OpenCV: terminate handler is called! The last OpenCV error is: OpenCV(3.4.3) Error: 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 cv::xfeatures2d::SIFT::create, file D:\library\opencv-3.4.3\opencv_contrib-3.4.3\modules\xfeatures2d\src\sift.cpp, line 1207
特許で保護された機能を使うには、それ専用のオプションをつけてビルドしてね。ということらしいです。SIFTは特許で保護されているので使えなかったわけですね。
対策
出力されたエラーを見るに、CMakeでOPENCV_ENABLE_NONFREEというオプションをつけて再度OpenCVをビルドすればいけそうな雰囲気です。CMakeのオプションを探せば確かにありましたこのオプション。
このオプションにチェックをつけてOpenCVをビルドし直します。そして再度SIFTを使ったプログラムをビルド&実行すると、無事にSIFTが動きました!!
コメント
[…] 参考記事:SIFTを使おうとするとError:The function/feature is not implementedと出力された […]