ケイエルブイは、ハイパースペクトルカメラ・光学部品・光源など世界中の光学機器を取り扱う専門商社です。

03-3258-1238

お問い合わせ
KLV大学 マシンビジョンコース

【Python×OpenCV】
初めてのOpen CV(画像処理ライブラリ)ガイド

本記事では、画像処理に欠かせない「OpenCV」について、機能や基本的な使い方について 解説します。

OpenCVとは

OpenCVは、インテルのエンジニアが開発した、無料で配布されている画像処理・画像解析のためのライブラリです。

OpenCV公式ページ

ライブラリは、プログラムに詳しい人が難しい機能のプログラムを作成してパッキングしたもので、プログラムに詳しくない人でも、そのライブラリを使用することによりすごいことが出来ます。

例えば、「顔検出」です。1からプログラムを作成して顔検出を実現するのはかなり大変ですが、OpenCVのライブラリを使用すれば、初心者の方が十数行のプログラムを書くことで実現出来ます。

PythonとOpenCVで簡単にできる顔検出

OpenCVで何が出来るのか

画像処理・画像解析といってもいろいろな内容が含まれます。
代表的なところでは、「顔検出」、「文字認識」、「画像のパターンマッチング」などがありますが、これらを実現するためにライブラリとして存在する機能一覧を紹介します。

OpenCV機能一覧

1.画像の入出力(カメラの設定)

カメラからの画像をプログラムに取り込んだり、処理した画像をPCの画面やファイルとして出力するためのコマンドが用意されています。

  • 画像の読み込み、保存
  • ”BMP","JPEG","PNG","PBM"など主要なフォーマットに対応しています。

  • カメラからの画像の取り込み
  • どのような解像度、フレームレート、カメラの設定(明るさ、コントラストなど)で取り込むかという設定の確認・変更などもコマンドで実行することが可能です。

詳細記事

より詳しく、OpenCVを用いたUSBカメラからの画像の取り込みに関して解説します。

カメラから画像を取得するコマンドcv2.readとは

2.画像の前処理

オブジェクト検出などの精度をあげたり高速化したりするための前処理として以下のような「画像を加工」するコマンドが用意されています。

  • グレースケール化
  • 2値化
  • エッジの抽出
  • リサイズ
  • 反転
  • 色変換
  • フィルター処理

例えば、顔検出では、検出の処理を高速化するために、事前にカラーで取得した画像をグレースケール化して情報量をすくなくするなどの工夫を行います。

例:グレースケール化

cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

処理前

処理後

”cv2.cvColor”がOpenCVが用意している色情報を変換するコマンド、"img"は入力画像、"cv2.COLOR_BGR2GRAY"はどのような処理をするかの設定です。
cv2.COLOR_BGR2GRAYは、「BGR(青、緑、赤)の順番で格納されているカラー画像をGRAY(グレースケール)に変換」を意味しており、OpenCVのcv2.readコマンドで読み込んだ画像は通常BGRの順番で格納されているので、この設定が使われます。
(他の方法で読み込んで色情報の順番が異なる場合は、cv2.COLOR_RGB2GRAYなどを使用します。)

3. 画像内のオブジェクト検出

以下のように、ある条件に合致したオブジェクトを検出するコマンドが用意されています。

  • コーナー検出
  • 特徴点検出
  • 顔検出
  • 目検出

コーナー検出や特徴点検出は、検出した結果を何かに使うという場合が多いと思いますが、検出するところまでを1つのコマンドで実行できるのは非常に便利です。
また、顔検出や目検出に関しては、コマンドを実行すると、左下座標と幅、高さが数値データとして得られます。

例:顔検出

face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)

処理前

処理後

[[ 70  92 169 169]]
  


1:顔の左下座標のx
2:顔の左下座標のy
3:顔の高さh
4:顔の幅w

4. 画像への描画処理

様々な情報を追加するために、枠の描画や、文字挿入のコマンドが用意されています。
描画できるものには、以下のようなものがあります。

  • 矢印
  • 正方形
  • 多角形
  • 円(円弧)
  • 文字

例えば、顔検出したあとに、元の画像の顔の箇所に枠を追加することが可能です。

例:正方形描画

cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

処理前

処理後

5. Deep Learning(機械学習)

Deep Learningは、教師データ(正解データ)を機械に与えて学習モデルを作成すると、その学習モデルを使って分類や回帰(定量値の算出)ができるようになるという優れた技術です。
例えば、手書きの文字や動物、食べ物、造形物の写真の画像を教師データとして用いて学習させると、その後、画像からそれらの対象を抜き出したり、判別したりすることができるようになります。

OpenCVには、教師データとして”正解データ”のDBを作成するコマンドやその後、そのデータを学習させるコマンドが用意されています。

6. その他

他にも以下のような処理が可能です。

  • カメラキャリブレーション処理
  • キャリブレーションパターンを写した写真からカメラのパラメータを求めることができる

  • コンピュテーショナルフォトグラフィー処理
  • 異なるダイナミックレンジの写真を組み合わせて、白飛びのない写真を作ることができる

OpenCVの弱点

機能的にはかなりの充実度と完成度を併せ持ったライブラリですが、有志による無償のオープンソースプログラムですので、以下のような点が弱点としてよく挙げられます。

■公式のドキュメントだけではよくわからないことがある。
 各コマンドの引数などは、本やGoogle検索で調べる必要があります。

■行列の計算が苦手
 行列に関しては、別ライブラリのNumpyを組み合わせて使用されている方が多いようです。

OpenCVの使用環境

OpenCVは、多くの環境で使えることもメリットの一つです。サポートOSとプログラム言語の観点で見ていきます。

OpenCVのサポートOS

OpenCVはマルチプラットフォーム対応なのでほとんどのOS上で問題なく動作します。
産業用でも使われるようになったラズベリーパイもLinux系のOSなので問題なくOpenCVを使用できます。

  • Windows
  • Linux
  • Mac OS
  • Free BSD
  • iOS
  • Android

OpenCVのサポートプログラミング言語

OpenCVを使用できる言語は、バージョンによって異なりますが、公式にサポートされているのは以下の言語になります。

V2.x V3.x V4.x
Python
C++
Java
C ×

公式サポート外ですが、実際には、C#、Lua、PHP、Ruby、Goなどでも動作するようです。

PythonでOpenCV使用する方法

Pythonをインストールしていないという方は、まずは以下を参照してPythonをインストールしてください。

 →Pythonのインストール(バージョンの選び方)

(1)OpenCVのインストール方法

Windowsであればコマンドプロンプト上、LinuxやMacOSであればTerminal上で、以下のpipコマンドを実行すれば、OpenCVをインストールできます。

pip install opencv-python

(2)OpenCVの読み込み

プログラムコードの初めにOpenCVのライブラリを読み込むための宣言を追加します。

import cv2

この宣言により、プログラムでOpenCVを使用するということをプログラムが認識し、プログラム内部でOpenCVのコマンドを使用した際に、OpenCVのライブラリ内に記述されたプログラムが実行されます。

(3)OpenCVのコマンドを使う

OpenCVの公式ドキュメントのOpenCV-Python Tutorialsを確認するとやりたいことからコマンドを探すことができます。

例えば、しきい値処理をしたい場合には、Tutorialsから"Image Processing in OpenCV" -> "Image Thresholding"を順番に選択するとしきい値処理のコマンドの詳細(コマンドやその引数の意味)を確認できます。

コマンド
cv.threshold(src, thresh, maxval, type) 
引数

上記のcv.thresholdの後ろにある()内のsrc, thresh, maxval, typeが引数です。
引数は、OpenCVのライブラリに引き渡すパラメータで、これらの値によってOpenCVの動作が変わります。

src 入力配列
thresh しきい値
maxval しきい値の最大値(通常255を使用)
type しきい値タイプ

引数の更なる詳細は、以下のような方法で確認していく必要があります。

  1. 本やWeb検索などで確認する
  2. OpenCVのチュートリアルにある記述を確認する
  3. 自分で値を変更して動作を確認する。

一部のコマンドの詳細に関しては、本サイトの他のコンテンツでも説明していくので参考にしていただけると幸いです。

まとめ

今回、OpenCVについて、何ができるのか、どうやって使用するのかを紹介しました。
OpenCVは画像処理・画像解析の優れたライブラリで、色々は処理を多くのプラットフォームで実行することが可能です。
ですが一方で、ライブラリには、自由度が少ない、仕様がわからないと使いにくいという側面もあります。しかも、実際に使用するには複数のコマンドを組み合わせて使用するので、より複雑になります。
1つ1つのコマンドの意味、引数の意味を理解して正しく設定していくことが必要になります。

用語集

マシンビジョンコース

ご質問・ご相談お気軽にお問い合せください

お電話でのお問合せ 03-3258-1238 受付時間 平日9:00-18:00(土日祝日除く)
Webでのお問い合わせ