71
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Raspberry Pi + Python 3 に OpenCV 3 をなるべく簡単にインストールする

はじめに

Raspberry Pi で Python から OpenCV を使えるようにする方法をググると山のようにヒットする。
それらをよく読むと、大体は次のどちらかになっている。
Python 3 で OpenCV 3/4 を簡単に使えるようにする方法はなかなか見つからない。

  • Python 2.x に OpenCV とモジュールをインストールする。
    下の 2 行を叩いてお終い。
    $ sudo apt-get install libopencv-dev
    $ sudo apt-get install python-opencv

  • Python 3.x に OpenCV をコンパイルする。
    apt-get で色々インストールした挙句、コンパイルに数時間かかるらしい。

散々探したところ、apt-get と pip3 だけでインストールできる方法が見つかったのでメモしておく。
一次ソースは多分ここ

手順

前提

次の環境で確認しています。

  • Raspberry Pi 3 model B+ (他のモデルでも大丈夫なはず)。
  • OS は、Rasbian Stretch。
  • Python 3.5.3。

ライブラリのインストール

OpenCV が依存しているライブラリを事前にインストールします。

$ sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-100
$ sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5
$ sudo apt-get install libatlas-base-dev
$ sudo apt-get install libjasper-dev

OpenCV のインストール

pip3 で OpenCV をインストールします。
ダウンロードが 100% に到達しないとハッシュエラーになる。そうなったらやり直します。

$ sudo pip3 --default-timeout=1000 install opencv-python

インストールが完了したら、利用できるか確認します。
カレントディレクトリに test.jpg を置いておき、以下の通り実行して canny.jpg ができたら成功です。

$ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.4.4'
>>> bgr = cv2.imread('./test.jpg', cv2.IMREAD_COLOR)
>>> gray = cv2.cvtColor(bgr, cv2.COLOR_BGR2GRAY)
>>> canny = cv2.Canny(gray, 200, 50)
>>> cv2.imwrite('./canny.jpg', canny)
True

おわりに

最初に見つけたのをやらずに、根気よく調べたおかげで却って手間が省けました。

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
Sign upLogin
71
Help us understand the problem. What are the problem?