グレースケールとは
日本語的に言えば、白黒濃淡画像
白から黒までの濃淡で、画像を表現します。
ピクセルの標本値に光度以外の情報が含まれていない画像のことである。
つまり、RGBなど色空間を使用しない画像です。
グレースケールでは、画像を光が最も強い白から最も弱い黒まで間の灰色の明暗も含めて表現します。
光の強さの表現には範囲があり、この範囲は抽象的には、0(光が全くない状態:黒)から1(すべての光が最大限出ている状態:白)までの値を取ります。
カラーからグレースケールへの変換式
$$\displaystyle Y=0.299R+0.587G+0.114B$$
Pythonを使ってグレースケール変換
PythonのライブラリOpenCVを使う方法と、numpyだけを使う方法を2種類を紹介します。
画像は、OpenCVで開きます。
適当な画像ファイルを指定してください。
OpenCV
OpenCVでは、グレースケールに変換する方法は2つあります。
1つは、cvtColorで変換する方法です。
2つ目は、画像読み込み時に、引数に”0″を渡す方法です。
グレースケールしか使用しないときは、2つ目の方法で十分でしょう。
import cv2 import numpy as np img=cv2.imread('haruna_kankore.png') #1つ目の方法 gray_cv = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) cv2.imwrite("gray_cv.png", gray_cv) #2つ目の方法 gray = cv2.imread('haruna_kankore.png', 0) cv2.imwrite("gray.png", gray)
Numpyで変換
import cv2 import numpy as np def numpy_gray(src): r, g, b = src[:, :, 0], src[:, :, 1], src[:, :, 2] gray = 0.2909 * r + 0.5870 * g + 0.1140 * b return gray gray_num = numpy_gray(img) cv2.imwrite("gray_num.png", gray_num)
結果
入力画像
OpneCV-cvtColor()
OpenCV-imread(0)
Numpy