見出し画像

OpenCVで画像がグレースケール画像か判別する方法

あれ、この画像ってグレースケール画像だっけ?と思った時のためのメモです。

環境は
- Python 3.8
- OpenCV 4.0.1
です。

import cv2

# 画像ファイル名
fname = "input.png"

# 画像の読み込み
img = cv2.imread(fname)

# RBG成分の分離
img_blue, img_green, img_red = cv2.split(img)

# 判別してグレースケール画像に変換
if (img_blue==img_green).all() & (img_green==img_red ).all():
    print("Grayscale!")

ようはRGBの画素値が同一であればグレースケール画像だと判断しています。

使用例としては、グレースケール画像をスクリーンショットしたときに、容量を削減できる場合があります。カラー画像をグレースケール画像としてOpenCVで保存します。

import cv2

# 画像ファイル名
fname_in = "input.png"
fname_out = "output.png"

# 画像の読み込み
img = cv2.imread(fname)

# RBG成分の分離
img_blue, img_green, img_red = cv2.split(img)

# 判別してグレースケール画像に変換
if (img_blue==img_green).all() & (img_green==img_red ).all():
    img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) 
    
# 保存
cv2.imwrite(fname_out, img)

こちらのサイトから画像をお借りします。スクリーンショットで保存しました。

画像1

「input.png」347.7 KB

画像2

「output.png」242.4 KB

確かに削減できているようです。

この記事が気に入ったらサポートをしてみませんか?