Help us understand the problem. What is going on with this article?

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

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

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

jeankenshow
主にpython(scikit-learn, opencv, TensorFlow, Keras)での画像解析をしています。その他、Railsとreact - redux、node.jsを使った、バックエンドと少しのフロントエンドをば。Rも少しだけ触れます(物理的に)
rist-co
最新の人工知能(Deep Learning)を用いて人の視覚情報が関わる全ての業務の自動化を目指しています
https://www.rist.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした