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)
こちらのサイトから画像をお借りします。スクリーンショットで保存しました。
「input.png」347.7 KB
「output.png」242.4 KB
確かに削減できているようです。
この記事が気に入ったらサポートをしてみませんか?