あしのさき

python & computer vision

opencvのグレースケール読み込みの違い

opencvで画像を読み込む際にカラーかグレースケールかを選択できるけど、下記の2つだと値がかわるらしい。

  1. カラー画像をグレースケールオプションで読み込み
  2. カラー画像として読み込んでからグレースケール化


確認するコードは例えばこんな感じで

import cv2
img_1 = cv2.imread('test.jpg', flags=cv2.IMREAD_GRAYSCALE)
img_2 = cv2.imread('test.jpg', flags=cv2.IMREAD_COLOR)
img_2 = cv2.cvtColor(img_2, cv2.COLOR_BGR2GRAY)
diff_img = img_1 - img_2
print(diff_img.max()) 

cv2.IMREAD_GRAYSCALEを使うと環境によって出力が変わるらしいので
厳密にやるならcv2.cvtColorが安全。

あとimreadのflagsを数字で指定してたけど、ちゃんと定義があったの書いとく。

img_1 = cv2.imread('test.jpg', flags=cv2.IMREAD_GRAYSCALE)
img_2 = cv2.imread('test.jpg', flags=cv2.IMREAD_COLOR)
img_3 = cv2.imread('test.jpg', flags=cv2.IMREAD_ANYCOLOR)
img_4 = cv2.imread('test.jpg', flags=cv2.IMREAD_ANYDEPTH)
img_5 = cv2.imread('test.jpg', flags=cv2.IMREAD_UNCHANGED)

こういう小ネタ知っとかないと意外なところで躓いたりするので侮れない。