Python で画像をグレースケールに変換する
-
Python で画像をグレースケールに変換する
pillow
ライブラリのimage.convert()
メソッドを使用する -
Python で
scikit-image
モジュールのcolor.rgb2gray()
メソッドを用いて画像をグレースケールに変換する -
OpenCV
ライブラリのcv2.imread()
メソッドを用いた Python で画像をグレースケールに変換する -
変換式と
Matplotlib
ライブラリを用いた Python で画像をグレースケールに変換する
このチュートリアルでは、Python で画像をグレースケールに変換する様々な方法を説明します。グレースケール画像とは、1つのピクセルが光の量を表していたり、光の強さの情報だけを含んでいる画像のことです。単次元の画像であり、濃淡の異なるグレーカラーのみを持っています。
グレースケール画像は単次元であるため、様々な問題や Canny エッジ検出のようなアルゴリズムにおいて、モデルの学習の複雑さを減らすために使用されています。
この記事では、Python のモジュールの様々な方法を使って、Python で画像をグレースケールに変換したり、画像をグレースケールとして読み込んだりする方法を見ていきたいと思います。
Python で画像をグレースケールに変換する pillow
ライブラリの image.convert()
メソッドを使用する
image.convert(mode, ..)
メソッドは画像を入力として受け取り、それを mode
引数で指定した画像タイプに変換します。モードには、1 ビットおよび 8 ビットピクセルの白黒画像、RGB
画像、HSV
画像、BGR
画像、LAB
画像などがあります。
画像をグレースケールに変換したいので、モード引数に 1
を渡すと 1 ビット白黒モード、L
を渡すと 8 ビット白黒モード、LA
を渡すとアルファモードになります。以下の例では、pillow
ライブラリの image.convert()
メソッドを用いて Python で画像をグレースケールに変換する方法を示します。
from PIL import Image
img = Image.open("test.jpg")
imgGray = img.convert("L")
imgGray.save("test_gray.jpg")
元の画像
コンバートされたグレースケール画像。
Python で scikit-image
モジュールの color.rgb2gray()
メソッドを用いて画像をグレースケールに変換する
color.rgb2gray()
は RGB 形式の画像を入力として受け取り、入力画像のグレースケールコピーを返します。以下のコード例は、scikit-image
モジュールの color.rgb2gray()
メソッドを用いて Python でグレースケール画像を取得する方法を示しています。
from skimage import color
from skimage import io
img = io.imread("test.jpg")
imgGray = color.rgb2gray(img)
OpenCV
ライブラリの cv2.imread()
メソッドを用いた Python で画像をグレースケールに変換する
画像をグレースケールで取得するもう一つの方法として、画像を直接グレースケールで読み込む方法がありますが、OpenCV
ライブラリの cv2.imread(path, flag)
メソッドを利用することで、画像をグレースケールで読み込むことができます。
この場合、cv2.imread()
メソッドの flag
の値が 1 に等しいとすると、アルファチャンネルを除いた画像を読み込み、0
の場合はグレースケールとして読み込み、-1
の場合はアルファチャンネルの情報を含む画像を読み込みます。
したがって、flag
の引数に 1
を渡すことで imread()
メソッドを用いて指定したパスから画像をグレースケールとして読み込むことができます。
以下のコード例は、cv2.imread()
メソッドを用いて Python で画像をグレースケールで読み込む方法を示しています。
import cv2
imgGray = cv2.imread("test.jpg", 0)
変換式と Matplotlib
ライブラリを用いた Python で画像をグレースケールに変換する
また、標準的な RGB からグレースケールへの変換式である imgGray = 0.2989 * R + 0.5870 * G + 0.1140 * B
を用いて画像をグレースケールに変換することもできます。
このメソッドは Python の Matplotlib
ライブラリを使って実装できます。まず、mpimg.imread()
メソッドを使って画像を読み込み、RGB 画像の赤、青、緑の次元行列を取得します。グレースケール画像を得るためには、完全な行列に数式で与えられた値を乗算する必要があります。
以下のコード例は、Matplotlib
ライブラリを使って Python で RGB からグレースケールへの変換式を実装する方法を示しています。
from matplotlib import pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread("test.jpg")
R, G, B = img[:, :, 0], img[:, :, 1], img[:, :, 2]
imgGray = 0.2989 * R + 0.5870 * G + 0.1140 * B
plt.imshow(imgGray, cmap="gray")
plt.show()