画像を加工する場合グレイスケールの方が都合がよい場合が多いので、PythonとOpenCVでカラー画像をグレイスケールに変換する方法を調べてみました。
#!/usr/bin/env python3
# coding: utf8
#
# グレイスケールに変換
#
import cv2
import numpy as np
src_file = "00184.jpeg"
# カラーで読み込み
im = cv2.imread(src_file, cv2.IMREAD_COLOR)
print(im.shape)
# (1200, 846, 3) 高さ1200 幅846 24ビットカラー(3バイト)
# グレイスケールに変換
im = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)
print(im.shape)
# (1200, 846)
# グレイスケールで読み込み
im = cv2.imread(src_file, cv2.IMREAD_GRAYSCALE)
print(im.shape)
# (1200, 846)
まずカラーで読み込んでcvtColor()
でグレイスケールに変換します。
確認のためim.shape
出力しています。
カラーの場合高さ、幅、チャンネル数が並びます。(幅、高さ…ではない)
グレイスケールの場合高さ、幅が出力されました。(戻り値が可変)
ということは、高さ、幅のみ取得の場合はim.shape[:2]
次に、読み込み時cv2.imread
のオプションでグレイスケールを指定する方法です。
1行で済みますし、画像のフォーマットなどを考えずにグレイスケールで読み込んでくれるようなのでかなり便利そうです。
コメント