かみのメモ

プログラムな話題中心の勉強メモ

OpenCV入門するならまずサンプルコードを動かしてみよう

以前のWindowsでOpenCV+contribをビルド・インストールするに引き続きOpenCVネタ。

OpenCVリポジトリに用意されているサンプルコードがなかなかバリエーション豊かで勉強になることに気付いたので、宣伝したいと思います。

OpenCVのサンプル集

https://github.com/opencv/opencv/tree/master/samplesを見てのとおりC++JavaPython向けのものからandroid、DNN、OpenGLなど特定の環境と組み合わせる用のものまで様々なサンプルが用意されています。

この記事では環境構築とサンプルコードの実行が簡単なPython向けサンプルをとりあえず試してみます。

インストールしておくもの

  • Python
    • 一応Python 2でも動くらしいですが、Python3を使うのが無難だと思います
    • 筆者の環境は3.7.0
  • Git

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

Pythonのパッケージマネージャーpipを使います。 いくつかのサンプルはOpenCVの外部モジュールであるopencv-contribを利用するのでそちらも一緒にインストールしておきます。

python -m pip install opencv-python opencv-contrib-python

サンプルのダウンロード

サンプルコードとかサンプル画像を取得するためにOpenCVリポジトリを丸ごとクローンします。 適当なディレクトリを作って次のコマンドを実行します。

git clone https://github.com/opencv/opencv.git

サンプルを実行してみる

サンプルのダウンロードが終わったらopencv/samples/pythonの中に大量のpythonファイルが入っていると思います。 その中の1つdemo.pyを実行します。

cd opencv/samples/python
python demo.py

すると次のような画面が出てきて、サンプルコードの一覧を確認することができます。

f:id:kamino-dev:20180904180746p:plain

とりあえずbrowseを選択してRunボタンを押してみます。 するとサンプルbrowse.pyが起動します。

f:id:kamino-dev:20180904181700p:plain

マウスカーソルを当てた場所が拡大して表示される、というだけの簡単なプログラムですが、きちんと動いていることがわかります。 プログラムを終了するときはESCキーを押します。

もしWindowsユーザーで'C:\Program' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。のようなエラーが出たら一旦画面を閉じて、demo.pyの170行目あたりのPopen(sys.executable + ' ' + cmd, shell=True)Popen('"' + sys.executable + '" ' + cmd, shell=True)に変更してもう一度実行してみてください。

ついでにもう一つdeconvolutionを実行してみます。

f:id:kamino-dev:20180904182628p:plain

今度はもう少し実践的なデモです。 左のような手ブレ写真にdeconvolution(畳み込み演算の逆の処理)を施すことで手ブレによるノイズを除去し、右のような画像への復元をしています。 右上のスライダーを動かしてカーネルのパラメータを調節できるようになっています。


この他にもカメラキャリブレーションcalibrate)、Canny法によるエッジ検出(edge)、顔認識(facedetect)、Webカメラで物体追跡(camshift)など色々なサンプルがあるので、自分でプログラムを書くときの参考にしてみてください。

(時間ができたら全サンプルの解説記事とか書いてみたいなぁ)