自分の備忘録として残しておきます。
とりあえず解決方法が知りたい人は「解決方法」を参照してください。
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通りが考えられます。
- v4を「OPENCV_ENABLE_NONFREE」再設定してビルド
- 「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の再起動も忘れずに)
コメント