画像をPythonで扱う方法!OpenCVとPillow

Python

今日はPythonで画像を扱う方法を説明していきたいと思います。

  • Pythonで使われる画像処理ライブラリ OpenCVとPillow
  • OpenCVで画像の読み込み
  • Numpyで画像を演算処理

画像処理ライブラリとは

画像処理ライブラリとは、画像をコンピューターに読み込んで数値として扱い、そこから様々な処理や分析を行うためのソフトウェアのことです。

その中でもOpenCVとはOpen Source Computer Vision Libraryのことで、1998年にIntelが開発を始めた無償のオープンソース映像/画像処理ライブラリのことです。
昨今、ILSVRC(画像認識コンペティション)で有名になったディープラーニングの件もあり、Pythonでも扱える画像処理のライブラリとして使用されています。
そして、一つ有名なライブラリとしてPillowというものがあります。これも同様にPythonで扱える画像処理のライブラリです。

Pillow

・リサイズやトリミング、回転、反転など基本的な処理

OpenCV

・画像処理(エッジ検出、空間フィルタリング、ヒストグラム)
・構造解析(輪郭抽出、特徴点抽出、短形領域抽出)
・動き解析と物体追跡(オプティカルフロー、モーションテンプレート)
・パターン認識(訓練データに基づく物体検出)
・カメラ校正と3次元再構築(カメラキャリブレーション、姿勢推定、エピポーラ幾何など)

上記の通り、簡単な画像を扱うのであればPillow、それ以外に高度な使用をする場合はOpenCVと覚えておくのがいいでしょう。
そもそもOpenCVは地球探査衛星からの映像処理や、CTスキャンなどの画像診断などのコンピュータービジョンのために作られたライブラリです。

コンピュータービジョンとは
コンピューターに取り入れた生の画像情報を処理して、必要な画像情報を取り出す技術

OpenCVで画像の読み込み

今回はOpenCVを使って画像の読み込みをやっていきます。

#OpenCVのインストール
!pip3 install opencv-python

#OpenCVをcv2としてインポート
import cv2

#画像描写用ライブラリをインポート
import matplotlib.pyplot
%matplotlib inline

#画像の読み込み
img = cv2.imread('任意の画像ファイル名.拡張子')

#画像の表示
plt.imshow(img)

#注意点としてOpencvはデフォルトではRGBではなく、BGRとして出力されてしまうため、画像の色が変わって表示されます。
#そこで事前に変換した上で表示します。

#BGR -> RGB
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
 
#再度画像の表示
plt.imshow(img)

 

Numpyで画像を演算処理

Pythonnに画像を読み込むことができた上で、ではここから画像をどう扱っていけばいいのでしょうか。

画像は1ピクセルごとの輝度によって表現されています。輝度は0〜255の数字で明るさを示しており、0が黒、255が白となっています。
これらがRGB、red,green,blueの3次元によって表現されています。

ベクトル、行列の計算であればPythonのライブラリであるNumpyが得意でしたね。OpenCVは最初からNumpyの形式で画像が読み込まれるためPythonとも非常に相性が良いわけです。
ここからディープラーニングのフレームワークを使ってCNN(Convolution Neural Network)を実装することも可能です。

ここからはまた少し難しくなってしまうので今回はここまでとします。