twitterよりちょっと長いの

せっかくだから書き残すよ。

Arch LinuxにOpenCVを導入した話

普段の作業でOpenCVが必要であるため、導入する。

f:id:AIN0204:20160802004617j:plain

長々と書くが、以下を実行すれば使えるようになる。
OpenCV自体はすんなり入るけど、Numpyを忘れないようにね。」という話。

$ sudo pacman -S opencv
$ sudo pacman -S python-pip
$ sudo pip install numpy

OpenCVのインストール

この一行でインストール。素晴らしい。

$ sudo pacman -S opencv

Pythonから触りたいのだが、このパッケージに含まれているのだろうか。確認する。

$ pacman -Ql opencv | grep python  
opencv /usr/lib/python2.7/
opencv /usr/lib/python2.7/site-packages/
opencv /usr/lib/python2.7/site-packages/cv2.so
opencv /usr/lib/python3.5/
opencv /usr/lib/python3.5/site-packages/
opencv /usr/lib/python3.5/site-packages/cv2.cpython-35m-x86_64-linux-gnu.so

確かに入っている。

importできるか試す。

$ pyhton
>>> import cv2
ImportError: numpy.core.multiarray failed to import
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: numpy.core.multiarray failed to import

怒られる。辛い。
どうやら、numpyが入っていない様子。

$ pyhton
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'numpy'

なるほど。入っていない。
では、numpyを入れよう。

numpyのインストール

そもそも、pipが入っていないのでpipのインストールから始める。
調べてみると"python-pip"と"python2-pip"の2つある。
Python3で使うのなら"python-pip"をインストールする。*1

$ sudo pacman -S python-pip

さて、numpyを入れよう。

$ sudo pip install numpy

改めて試してみる

無事、importできた

$ pyhton
>>> import cv2
>>> cv2.__version__
'3.1.0'

さらに、適当に画像を2値化してみた。

# -*- coding: utf-8 -*-
import cv2
import sys
 
if __name__ == '__main__':
    params = sys.argv
    if len(params) < 2:
        sys.exit(1)
    else:
        file_name = params[1]
    
    img_src = cv2.imread(file_name, cv2.IMREAD_GRAYSCALE)

    ret, img_bin = cv2.threshold(img_src, 100, 255, cv2.THRESH_BINARY)

    cv2.imshow("binary", img_bin)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

無事動いているようで何より。
簡単に新しいバージョンを使えるのはありがたい。

よもやま話

無理にpipを使わなくても、pacmanでnumpyなどの主要なモジュールはインストールできるが、それでもpipを使ったほうがいいのだろうか。

*1:python3-pipって名前ではないんっすね