Python3でopencvを使おうとしてハマった話


初投稿です。
python3でopencvを使おうとしてハマったので、メモがわりに残します。

環境

  • Python 3.6.2
  • pyenv-virtualenv
  • macOS 10.14.6

エラー内容

  File "test.py", line 3, in <module>
    import cv2
ModuleNotFoundError: No module named 'cv2'

唐突に現れたimport文のModuleNotFoundError
なんかの拍子にopencv-python誤って消してしまったかと思い、確認

$ pip list
Package               Version
--------------------- --------
...
opencv-python         4.1.0.25
...

普通にある...
とりあえず、直接pythonから叩いてimportしてみよう

Python 3.6.2 (default, Nov 18 2017, 21:22:04)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>>

うーん、謎が深まった...

やったこと

いろんな記事見ながらひたすらいろんなことを試した

  • pip使ってもう一度opencv-python入れ直す
  • site-packages/cv2以下のcv2.cpython-36m-darwin.socv2.soにrename
  • $ pip install opencv-contrib-pythonでopencv-contrib-pythonを入れる(利用法に注意してください。)
  • $ brew install opencv3 --with-python3 --without-python --with-contrib

どれもダメでした...

解決方法

cv2をimportする前にライブラリのパスを通す必要があったらしい
とりあえず下記のコードでなんとか動いた!

import sys
sys.path.append('/Users/yuta/.pyenv/versions/lab/lib/python3.6/site-packages')
import cv2

原因

きっとパス関連の何かなのだと思う
詳しいことは勉強不足で結局わからずじまいであった...
とりあえず、投稿してみて強い人からコメント来るといいな

参考記事

未経験大学生によるpython入門日誌-第4話 OpenCV篇
Pythonチュートリアルをやってみる 特別編