Pythonで画像をグレースケールにする方法

グレースケールとは

日本語的に言えば、白黒濃淡画像

白から黒までの濃淡で、画像を表現します。

ピクセルの標本値に光度以外の情報が含まれていない画像のことである。

つまり、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

参考


おすすめ