LoginSignup
81
87

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-06-17

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

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が使いたい人は、次でシンボリックリンクやらなんやらをします。

※pipでインストールできるOpenCVはデフォルトでCUDAを利用したGPU計算ができないので、CUDAを利用できるようにOpenCVを既にビルドしている方などは、下記の方法でCUDAありのOpenCVを使えるようになります。
(OpenCVのビルド時にpythonの場所を指定することができるので、その指定を行ってビルドしていればimport cv2ができるようになっているはずです。)

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 した方が圧倒的に早くて楽

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

81
87
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
81
87