【OpenCV 3.4】SIFTを使おうとするとError: The function/feature is not implementedと出力された

今まで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が動きました!!

コメント