【OpenCV入門】Pythonで画像認識するときに大切な基礎知識やメソッド

▼この記事をSNSでシェアする▼

スポンサーリンク

スポンサーリンク

個人的に画像認識をPythonでする時に大事だと感じた考え方やメソッドをまとめました。

OpenCV(画像ファイルのライブラリ)を扱う際に、頻出のメソッドとJupyter Notebookでの画像の確認等で使うMatplotlibのメソッドを補足する形で掲載しました。

ほかにもあれば勉強の進捗に合わせて追記します。

1. 考え方

1.1 画像ファイルの扱い方

画像をnumpyの配列で扱います。

そのためNumpyの便利な演算も使えます。いろんながその情報に対して、効率よく変更を加えることができたり便利です。

Open CVで画像を読み込むと、(width,height,色(B,G,R))3次元の配列になっている。

第1次元:横のピクセルごとの要素

第2次元:縦のピクセルごと要素

第3次元:色の情報、要素0が青色(0~255)、要素1が緑色(0~255)、要素2が赤色(0~255)

MatplotlibではRGBの順なので、注意。

出力・表示をMatplotlibで行う際は色空間の変更が必要

1.2 グレースケール化

1.1で紹介した仕組みで画像を扱う際、明暗や輪郭のデータを分析しやすくするために白黒の画像をよく使います。

BGRの情報を白黒のみに変換することをグレースケール化と言います。

第1次元:横のピクセルごとの要素

第2次元:縦のピクセルごと要素

第3次元:色の情報(白0~黒255)

→色の要素がBGRと3つあったのが、1つのみになります。

BGR色空間での表現             GRAYスケール(白黒のみ)

 → 

グレースケールを白黒反転

右上の画像の配列の入った変数に対して、「255- (白黒画像の配列)」とすることで簡単に白黒反転できます。

2. メソッド

2.1 OpenCV

OpenCVのライブラリインポート

画像ファイルの読み込み

グレイスケール化

色空間の変換(第2引数)のところには色空間の変換パラメータを指定します。

cv2.COLOR_(変換前の色空間)2(変換後の色空間)

たとえば「cv2.COLOR_BGR2RGB」であればBGRというデフォルトの色空間からRGBの色空間に変換しています。

matplotlibでRGBを扱う際に使います。

グレースケール変換する際はGRAY,

色相(何色か)を判定ロジックに使用する際はHSVに変換することが多いです。

色空間についての細かいことはここを見ると良いかも

http://optie.hatenablog.com/entry/2018/02/18/175935

サイズ変換

サイズは(width,height)の形で縦横をピクセルサイズを指定します。

1次元にする際は-1を指定します。

画像ファイルの保存

第2引数には画像ファイルの変数、実体としてはcv2の画像の配列が入ります。

四角形の表示

線の太さを-1にすると塗りつぶされた図形がマップされます。

w = 30

h = 45

cv2.rectangle(img, (40,60),(40 + w, 60 + h),(0,255,0),3)

とすると、imgの画像のピクセル座標(40,60)を左上に横30,縦45ピクセルの緑色で太さ3の四角形を表示する

画像の平滑化

ガウシアンカーネルサイズ(ksize):width,height
→正の奇数で大きいほどぼかし強い
第3引数:0ならsigma*
第4引数:0ならsize.width,heightから求める

画像の2値化

Ret しきい値
Thresh しきい値処理後の出力画像

thresholdに[1]を指定すると、画像のみ取得

しきい値の種類について

しきい値の種類 しきい値<データ しきい値>=データ
cv2.THRESH_BINARY_INV 0 最大値
cv2.THRESH_BINARY 最大値 0
THRESH_TOZERO_INV 0 変更なし
THRESH_TOZERO 変更なし 0
THRESH_TRUNC しきい値  変更なし

輪郭の抽出

返り値

  • image:出力画像ファイル
  • contours: 抽出された輪郭のリスト。各輪郭は (NumPoints, 1, 2) の numpy 配列。
  • hierarchy: 階層構造のリスト。(1, NumContours, 4) の numpy 配列。

findContoursに[0]を指定すると、画像のみ取得

抽出モード

  • RETR_LIST:単純に輪郭抽出
  • RETR_EXTERNAL:もっとも外側の輪郭抽出
  • RETR_CCOMP:2レベルの輪郭抽出
  • RETR_TREE:輪郭の階層すべて抽出

近似手法

  • CHAIN_APPROX:すべての輪郭の点を検出
  • CHAIN_APPROX_SIMPLE:最低限必要な輪郭の点を検出

2.2 matplotlib

画像の表示

複数データ表示

目盛りの軸の非表示

画像上部のタイトル表示

スポンサーリンク

▼この記事をSNSでシェアする▼

フォローする

メニュー・主な記事カテゴリ

おすすめ特集!




「ゆとり鳥日記」について
ITを中心に関心の赴くままに好きなように書いていく雑記ブログ!管理人が二人います。
◆フクロウ(19卒就活生)
◆トンビ(社会人1年目SE)

詳しいプロフィール
お仕事の依頼・ご要望

ゆとり鳥日記をBTCで応援する