opencvのグレースケール読み込みの違い
opencvで画像を読み込む際にカラーかグレースケールかを選択できるけど、下記の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)
こういう小ネタ知っとかないと意外なところで躓いたりするので侮れない。