OpenCVで画像の編集などを学んでみようとしている

openCVを使って手元の画像をちょっとだけ編集などしてみました。

  • 画像の切り取り
  • 画像の色反転
  • 画像から顔を認識するなど

はMatplotlibを利用することですんなりと動かすことができた。 ファイル入力 → 画像から顔を認識し四角で囲む → 編集後の画像を画像として出力する これは簡単にできました。

今回は画像の読み込みと簡単な加工についてです

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

今回使うのは上記のライブラリを利用しました。

  • openCVを利用。(それはそう。画像だもの)
  • 画像は行列データを含むことがあるっぽいのでnumpy
  • 画像の出力などで利用するのでmatplotlibを

img = cv2.imread('misc/cat.jpeg') 画像の読み込みはopenCVの内部関数'imread'を使い引数に画像を渡してあげるだけで読み込みます。

type(img)
img.shape

などとしてみて画像について確認してみるのも良いですね。

plt.imshow(img) 読み込んだ画像の出力では maplotlibのimshowを使います。 しかしこの状態では画像の色などが想定しているものと違うはずです(後述)

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)

そこで cvtColor関数にいろを変えるようにお願いします。 これで正常に出力が可能になります。

この原因は OpenCVとMatplotlibの画像を読み込んだ際の色合いの表し方がRGB,なのかBGRなのかというしょうもないもんだいなのですがこれを忘れると画像から生気がきえてしますので注意が必要そう。 (これに気づかず手元でいろいろしたけどググったらすぐに解決した、悲しい)

plt.subplot(1,2,1)
plt.imshow(img)
plt.subplot(1,2,2)

plt.imshow(resizedImg)

このような感じに処理すると一つの描画領域に複数の画像を表示することが可能です。

# gray scale 
grayedImg = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

plt.subplot(1,2,1)
plt.imshow(img)

plt.subplot(1,2,2)
plt.imshow(grayedImg)
plt.gray()

cvtColor関数に'COLOR_RGB2GRAY'を利用すると画像がグレーアウトします。 グレーアウトした画像が欲しい時は便利かも(使う時があるのだろうか)