MacでOpenCVでSHIFTを使う方法

この記事は約3分で読めます。
スポンサーリンク

自分の備忘録として残しておきます。

とりあえず解決方法が知りたい人は「解決方法」を参照してください。

MacでOpenCV使用時にエラー

環境:

  • Mac Catalina
  • Anaconda (python 3.7.6)

上記環境でOpenCVのSHIFTを使用しようとするとエラーが発生。

エラーが発生するコード:

sift = cv2.xfeatures2d.SIFT_create()

エラー:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-15-2247b17ceab8> in <module>
----> 1 sift = cv2.xfeatures2d.SIFT_create()

AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d'

これはOpenCV3以降はライセンスが必要なSIFTやSURFがデフォルトでインストールされていない(pip install opencv-pythonで入っていない)ために、cv2の属性に含まれていないというエラー。

なので、opencv-contrib-pythonをpipで入れると、今度は以下のエラー。

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-15-2247b17ceab8> in <module>
----> 1 sift = cv2.xfeatures2d.SIFT_create()

error: OpenCV(4.2.0) /Users/travis/build/skvark/opencv-python/opencv_contrib/modules/xfeatures2d/src/sift.cpp:1210: 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'

原因

エラーメッセージに明記されている通り、ビルド時に「OPENCV_ENABLE_NONFREE」が設定されていないため。で、どうやらopencv-contrib-pythonがv4になってから上記が設定されていないようです。

解決方法

なので、解決方法は2通りが考えられます。

  1. v4を「OPENCV_ENABLE_NONFREE」再設定してビルド
  2. 「OPENCV_ENABLE_NONFREE」が設定されているバージョンを使用する

王道は「1」ですが、今回はSIFTの作業を早くやりたかったので、2を採用しました。

pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

これでとりあえずSIFTが使えるようになりました。

(Jupyter Notebook使用している場合はKernelの再起動も忘れずに)

コメント

タイトルとURLをコピーしました