Ubuntu16.04のPython3でOpenCV3を使う

OpenCVについて

画像処理するライブラリ
2系入れたいならディストリビューションごとにパッケージあるからそっち使いましょう
3系はパッケージが現時点(2016/06/24)でないから自分でビルドする
3.1.0しか検証してないけど多分ほかでも問題ないはず
Windowsは某所でwhl配布されてるからそれを使うと楽

ダウンロード

Sourceforgeからソースを落とせみたいな記事がたくさんあるけど罠です
makeでコケるのでGithubからcloneすると良いです

1$ cd ~
2$ git clone https://github.com/Itseez/opencv.git
3$ cd opencv
4$ git tag
5タグ一覧が出るから使いたいバージョンを探す
6$ git checkout 3.1.0
7ダメだったらcloneしたやつそのまま使えばいけるかもね(今回の記事ではcloneしたのをそのまま使用)

2016年11月24日 追記

バニラな環境でやったらハマったのでメモ

1-D PYTHON_EXECUTABLE=$(which python)

$(which python) は単にパス探してるだけなので
バニラだとpythonじゃなくてpython3で探さないとダメだった

ビルド

 1$ pwd
 2/home/hoge/opencv
 3$ mkdir build
 4$ cd build
 5$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_FFMPEG=OFF -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D PYTHON_EXECUTABLE=$(which python) ..
 6ログの途中にちゃんとPythonが対象に含まれてるか確認しておく
 7これはpyenvでの結果だけどノーマルのPythonでもこんな感じで含まれてるはず
 8--   Python 2:
 9--     Interpreter:                 /usr/local/pyenv/shims/python (ver 3.5.1)
10--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.5m.so (ver 3.5.1+)
11--     numpy:                       /usr/local/pyenv/versions/3.5.1/lib/python3.5/site-packages/numpy/core/include (ver 1.10.4)
12--     packages path:               lib/python3.5/site-packages
13--
14--   Python 3:
15--     Interpreter:                 /usr/local/pyenv/shims/python3 (ver 3.5.1)
16--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.5m.so (ver 3.5.1+)
17--     numpy:                       /usr/local/pyenv/versions/3.5.1/lib/python3.5/site-packages/numpy/core/include (ver 1.10.4)
18--     packages path:               lib/python3.5/site-packages
19--
20--   Python (for build):            /usr/local/pyenv/shims/python
21$ make

コケないことを祈ろう
make InstallはOpenCVそのものが使いたい場合いるけどPythonで使うなら要らない

ライブラリの追加

Python用のパスを通す

 1$ find . -name "*.so"
 2./lib/libopencv_features2d.so
 3./lib/libopencv_cudafilters.so
 4./lib/libopencv_imgcodecs.so
 5./lib/libopencv_cudacodec.so
 6./lib/libopencv_videoio.so
 7./lib/libopencv_cudabgsegm.so
 8./lib/cv2.cpython-35m-x86_64-linux-gnu.so ←これ
 9./lib/libopencv_cudaobjdetect.so
10./lib/libopencv_objdetect.so
11./lib/libopencv_imgproc.so
12./lib/libopencv_core.so
13./lib/libopencv_shape.so
14./lib/libopencv_flann.so
15./lib/libopencv_cudafeatures2d.so
16./lib/libopencv_cudastereo.so
17./lib/libopencv_cudalegacy.so
18./lib/libopencv_cudaimgproc.so
19./lib/libopencv_photo.so
20./lib/libopencv_cudev.so
21./lib/libopencv_video.so
22./lib/libopencv_ml.so
23./lib/libopencv_stitching.so
24./lib/libopencv_cudawarping.so
25./lib/libopencv_videostab.so
26./lib/libopencv_cudaarithm.so
27./lib/libopencv_highgui.so
28./lib/libopencv_superres.so
29./lib/python3/cv2.cpython-35m-x86_64-linux-gnu.so ←これ
30./lib/libopencv_cudaoptflow.so
31./lib/libopencv_calib3d.so
32必要な方を適宜モジュールのパスが通ったところへコピーする

おわり