一般的な画像処理
画像処理とは、写真などの画像を受け取り、その画像に対していろいろな操作を行って加工することです。例えば、ある画像に対して、色調の補正や拡大縮小、ノイズ除去などの処理を施して、より美しく見やすい画像にしてあげる処理です。これは狭義の画像処理と定義できます。
画像解析としての画像処理
画像解析は、画像からその中に写っているものについて情報を取り出す技術です。これも画像処理の一つです。例えば、画像内の物体の形状や色、大きさなどを把握するなどの処理が当てはまります。
つまり、画像処理は、画像から得られる情報を利用して、より詳細な情報や機能を提供する技術の総称と言えます。
コンピュータビジョン
コンピュータビジョンとは、二次元の画像から元の現実世界の情報を取り出す技術です。入力された画像を解析し、その中に写っているものが何であるかを理解することができます。
この技術を利用することで、例えば自動運転車の衝突回避や顔認証などの高度な機能が実現されています。コンピュータビジョンは、人間の視覚(ヒューマンビジョン)に相当する情報処理に相当する画像処理の一種です。人間も網膜に移った2次元の像から、外界の3次元世界を認識しているのです。
画像とは何か
ここまで、画像処理と言って来ましたが、そもそも画像とはどのようなデータなのでしょうか?
一般的にカラーの画像は、赤、緑、青の3つの光の強さを組み合わせて表示されます。この3つの光の画像を重ね合わせることであらゆる色の光を表現することができます。この3つの光の画像をRGB(Red Green Blue)画像と言います。

また、画像は上図のような小さな正方形の集まりであるピクセルで構成されています。各ピクセルには、その場所の光の明るさを表す数値である輝度が格納されています。また、画像の大きさは、縦と横に並ぶピクセルの数で表現されます。このピクセルの集まりを画素と呼び、コンピュータで扱う場合には、輝度の値は0~255という範囲の符号なし整数(unsigned integer)8ビットで表現することが一般的です。
画像は、高さ、幅、色(奥行き)の3つの次元を持ちます。これらの次元は、高さと幅の2次元の行列に、色の次元を加えた3次元のテンソルとして数学的概念では表現されています。
Python で RGB 画像を表示してみる
OpenCV を使用した画像の表示
以下では、本ブログのロゴマークの画像データを OpenCV と Matplotlib を使用して画像の描画をするサンプルです。
# OpenCV と Matplotlib で画像を表示するために必要なライブラリをインポート
import cv2
import matplotlib.pyplot as plt
# path に格納されたファイルを OpenCV で読み込み
path = "/content/Logo.png"
img = cv2.imread(path)
# Matplotlib で画像を表示
plt.imshow(img)
実行結果を見てみるとどうやら、色味が反転しているようです。
これは、OpenCV が BGR の順番で値が格納されるのに対して、 Matplotlib では RGB の順番で画像の描画を行っているためです。
OpenCV を用いて元の画像通りの色合いで表現するには、OpenCV の cvtColor() 関数を使用することで実現できます。cvtColor() の第1引数に変換したい画像データ、第2引数に変換前後の構成を記述します。今回は BGR から RGB に変換したいため、 COLOR_ BGR2RGB を指定します。
# BGRからRGBに変換
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# Matplotlib で再度画像を表示
plt.imshow(img_rgb)
以上のように、無事に実際の色合いのまま OpenCV を用いて画像を表示することができました。
Pillow を使用した画像の表示
以下では、前項で説明した OpenCV による画像の読み込みと表示と同様の処理を Pillow を用いて記述したものになります。Pillow では、標準で RGB の順番でデータが格納されているため画像を取り込んでそのまま表示することで元画像のデータをそのまま表現することができます。
# Pillow を使用するために必要なライブラリをインポート
from PIL import Image
# path に格納されたファイルを Pillow で読み込み
path = "/content/Logo.png"
img = Image.open(path)
# Pillow の show() で画像を表示
img.show()
まとめ
今回は、画像処理とはいったいどのようなものなのかを整理しました。画像解析などの高度な処理を実装する前の基本的な画像の取り込み表示方法として代表的な OpenCV と Pillow を使用して実装する方法を理解することができたかと思います。


コメント