Python
OpenCV
Python3

今更ながらPythonでOpenCVを使うための覚書

この記事はどんな人が読むといいの?

macを使っていて、すでにOpenCVをインストールされている人や、どうしても公式のOpenCVが使いたい〜って人向けです。(需要は少ないかも?)
windowsでもやることは同じなので、参考程度にしてみてください。ただし、あくまでも参考です。

私も初心者なので、至らぬ点が多々ございますが、始めさせていただきます。

OpneCVとは・・・

大雑把に言えば、画像・動画に関するプログラミングに特化したオープンソースのライブラリ。
細かく言えば、面倒なのでやめておきます。...理解してないわけじゃないよ?

まあ、画像や動画の処理をしたり、物体検出をしたり、さらにはモーション解析や物体追跡を簡単に行えるようになるライブラリです。

このエサ(OpenCV)をPythonちゃんに食べさせる(importする)と、Pythonちゃんは上機嫌になって、いろんな芸(機能)を見せてくれるのであります。

元々はC/C++向けですが(間違えていたらすみません)、Pythonバインディングが用意されているので、いろいろ面倒なCよりもPythonから使うのが楽ということです。

PythonでOpenCVを使うメリット
1 コードが短く、読みやすい
2 scipyやnumpyなど、他のライブラリと連携しやすい
3 エラーの原因を特定しやすい

画像処理ならMATLABがあるじゃないだって?

知らない子ですね。そんなお金のかかる言語はワタシシラナイ。

OpenCVってもうpip installできるじゃん。

そうなんです。

$ pip install opencv-python

最近は、このコマンド一発でimportできるようになってしまったので、以前の苦労はなんだったんだ、、と思わないでもありませんが、許します。

簡単に使えるなら、pip install してしまえばいーじゃんと思ったそこの貴方!正解です!今すぐインストールして、チュートリアルをしましょう!

ただし、このパッケージは非公式のものなので、前述の通り、すでにOpenCVがインストールされている人・どうしても公式のOpenCVが使いたい人は、次でシンボリックリンクやらなんやらをします。

PythonでOpenCVを使うための手順

PythonとOpenCVのバージョン

私の環境では
Python : 3.6.2
OpenCV : 3.4.1-4
です。お使いの環境に合わせてバージョンを変更してください。

また、事前にnumpyをインストールしておきましょう。

PythonでOpenCVが使えるようになるまでの流れ

  1. brewでOpenCVをインストール
  2. Pythonのsite-packagesの場所を調べる
  3. OpenCVへのシンボリックリンクを生成する
  4. cv2が使えるか確認する

brewでOpenCVをインストール

$brew install opencv

これだけで、/usr/local/bin/に住んでいるpythonではimport cv2が使えるようになるらしいです。
でも私のパイソンちゃんは別の場所を住処としているので、エサ(OpenCV)をpythonちゃんに届けてあげなくてはいけません。

venv, virtualenvで使用しているpythonも/usr/local/bin/にいないので、こちらもまた、OpenCVの場所を教えてあげる必要があります。

次に、brewでインストールされたOpenCVの場所を確認しましょう。
おそらく、下のディレクトリあたり。バージョンが違うと数字も異なります。
/usr/local/Cellar/opencv/3.4.1-4/lib/python3.6/site-packages/cv2.cpython-36m-darwin.so
これがエサの場所です。

Pythonのsite-packagesの場所を調べる

site-packagesとは、サードパーティ製のライブラリの置き場のことです。つまり、エサ箱です。

エサ箱の場所ですが、pythonちゃんに直接聞いてしまいましょう。
pythonの対話型シェルを起動して、現在使用しているpythonのsite-packagesの場所を調べます。

$ python
>>> import site; site.getsitepackages()
['/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']

お使いの環境によって異なりますが、私の場合、
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages
がエサ箱の場所です。

OpenCVへのシンボリックリンクを生成する

シンボリックリンクとは、とあるフォルダやファイルのリンクを保持しているもの。
今回の説明で行くと、エサの転送装置のようなものです。

この転送装置を使ってエサをエサ箱に届けてあげるのです。

シンボリックリンクの生成は、pythonのsite-packages内で行います。

cd /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages
$ ln -s /usr/local/Cellar/opencv/3.4.1-4/lib/python3.6/site-packages/cv2.cpython-36m-darwin.so ./

これで転送装置ができ、pythonちゃんにエサを届けることができました。
あとは使うだけです!

cv2が使えるか確認する

Pythonの対話型シェルを起動し、OpenCVのバージョンが表示されるか試してみましょう。

$ python
>>> import cv2
>>> cv2.__version__
'3.4.1-4'

正しいバージョンが表示されれば成功です。

これでようやくPythonでOpenCVを使うことができるようになりました。
なんと面倒なことでしょう。お疲れ様でした。

やっぱり pip install した方が圧倒的に早くて楽

冗長な文章にお付き合い頂き、ありがとうございました。