↓もし、良かったらSNSでの紹介よろしくお願いします。

PythonでOpenCV入門、面白いアルゴリズムの紹介

bootstrap

OpenCVとは

もっとも使われている画像処理ライブラリ

OpenCV(Open Source Computer Vision Library)とは
インテルが開発・公開した画像処理ライブラリです。
実装されている画像処理アルゴリズムは多岐にわたり、奥が深いライブラリです。

画像処理ライブラリの中では最も著名なライブラリです。

ほとんどのすべて言語で利用可能

下記の言語が公式でサポートされています。
非公式も含めると有名な言語であればほとんどラッパーがある状況です。

対応言語(公式)

  • Python
  • C/C++
  • Java
  • MATLAB

スマホ上でも利用可能

また、Windows、MAC、Linuxは当然としてOSやAndroidなどのスマホ上でもOpenCVを利用することができます。

おすすめはPython版

Python版で一通り機能を学習してから用途に応じて言語を切り替えるのがおすすめです。

Python版OpenCVのメリット・デメリット

メリット

  • コードがシンプル
    コードがシンプルなので学習のコストが大幅に削減できます。
  • エラーの特定がしやすい
    C/C++は細かいエラーで苦戦しますがPythonの場合はコードがシンプルなので本質的なエラーに集中してデバッグしやすいです。
  • 他のライブラリが充実している。
    Jupyterノートブックが使えるのはPythonの魅力!他にも機械学習ライブラリとの連携がしやすい
  • 適切な書き方をすれば、そこそこ高速に動作する
    OpenCVの処理はC/C++でコードが実行されるので、ライブラリに処理を任せると高速です。
  • インストールが楽
    pipでインストールすることができます。

デメリット

  • わずかだがC++限定の機能がある
  • アプリ開発には使えない
  • ドキュメントが充実してない
    ドキュメントはC++で解説されてることが多く場合によってはC++の関数からPythonの関数に変換して理解する必要がある。

Python版のデメリットは気にならない

最初の2点についてはOpenCV入門の時点では気にならないです。Pythonで入門してから必要に応じて言語を切り替えることでデメリットが無視できると考えています。

最後のデメリットについては本ブログでPythonのコードを紹介することで補っていきます。

OpenCVインストール

一昔前は、OpenCVをインストールするのは面倒でしたが、
いまとなっては、pipでインストールできます。
下のコマンドを打つだけで簡単にインストールができます。

pip install opencv-contrib-python

https://www.tech-tech.xyz/python-opencv-pip-install/

ちなみに、ソースからビルドする方法もありますが面倒なのでおすすめしません。

まずは動かしてみて!おすすめのアルゴリズム

顔認識

実感ではOpenCVでもっとも紹介されているアルゴリズムです。

コードはシンプルでおすすめです。

カスケードファイルの準備がつまずきポイントなので気をつけましょう。

https://www.tech-tech.xyz/haar-cascade/

前景抽出

OpenCVの凄さを実感するために見て欲しいアルゴリズムが前景抽出です。
公式からサンプルコードが配布されているので動かしてみましょう。

https://www.tech-tech.xyz/2627474/

ちなみにこの記事を書いたときは、
私が未熟でPythonが2系だったりOpenCVが2系です。
けれど、Python3系、OpenCV3系でも動くので安心してください。

動体検知

threading_sunflower

このアルゴリズムは、他のブログでもあまり紹介されていないマニアックなアルゴリズムです。

動画の取り扱いが必要になるので少し面倒です。

まずは「Pythonでの動画の取り扱い(OpenCVで再生とキャプチャ生成)」で動画が再生できるところまで確認してみましょう。

歩行者の動きを特定できていて最も面白いアルゴリズムでした。

https://www.tech-tech.xyz/background-subtraction/

OpenCVの記事

基本的な操作

  1. 【OpenCV】基本図形を一通り描いてみた。

  2. OpenCV(Python)画像の拡大・縮小

  3. Python(OpenCV)同じウィンドウに画像を重ねて表示する

  4. Python(OpenCV)透明画像の重ね合わせ

  5. OpenCVでアルファブレンド(Python)

  6. OpenCV(Python)でクロマキー

OpenCVのGUI

  1. 画像の読み込みと表示
    OpenCV(Python)GUIの基礎、画像の読み込みと表示
  2. マウス操作
    OpenCV(Python)GUIの基礎、線を描く。
  3. トラックバーの操作
    OpenCV(Python)GUI基礎編、ペイントツールを作ってみた
  4. 表示画像の拡大
    OpenCV(Python)GUI基礎編、画像の拡大表示
    OpenCV(Python)GUI基礎編、画像の拡大表示2

物体認識

  1. テンプレートマッチング法
    Pythonでテンプレートマッチング、OpenCVサンプルコードと解説
  2. 特徴点の抽出し、比較することで検出
    OpenCV(Python)で物体認識、特徴抽出(SIFT、SURF、A-KAZEの使い方)
  3. カスケード型分類器を用いて検出
    OpenCVで顔認識とそれ以外の物体認識(カスケード分類機まとめ)