OpenCVの座標系と画素値【OpenCV】

OpenCVの座標系と画素値に関する仕様です。

OpenCVの座標系 (2D)

OpenCVの座標系は左上が原点で、時計回りが正の回転方向となる座標系となっています。

OpenCVの座標系

OpenCVにおける色空間

BGR色空間

  • 画素値は(B, G, R)の順番で格納され、それぞれ0-255の256段階で指定されます。
  • 通常のRGB色空間とは順番が違うので注意してください。

主な色と画素値との関係

黒 (#000000)(0, 0, 0)
青 (#0000ff)(255, 0, 0)
緑 (#00ff00)(0, 255, 0)
赤 (#ff0000)(0, 0, 255)
黄色 (#ffff00)(0, 255, 255)
マゼンタ (#ff00ff)(255, 0, 255)
シアン (#00ffff)(255, 255, 0)
白 (#ffffff)(255, 255, 255)

HSV色空間

  • Hue(色相), Saturation(彩度), Value(明度)について、(Hue, Saturation, Value)の順番で格納されます。
  • Hue(色相)は0-179の180段階で、Saturation(彩度)/Value(明度)は0-255の256段階で指定されます。
  • 本来のHSV色空間の色相は360段階ですが、OpenCVでは180段階となっているので注意してください。

アルファチャネル

  • アルファチャネルはBGR色空間/HSV色空間の3つのパラメーターに加えた4つ目のパラメーターで、不透明度が0-255の256段階で表されます(0が透明、255が不透明)。

OpenCVにおける画像の扱い

  • 画像は第1軸がY座標、第2軸がX座標、第3軸がカラーチャネルの多次元配列として表現されます。特にOpenCV-Pythonではnumpy.ndarrayとして画像が扱われます。
    • 第1軸:Y座標の値
      • 要素数は画像のY座標のピクセル数です。
    • 第2軸:X座標の値
      • 要素数は画像のX座標のピクセル数です。
    • 第3軸:カラーチャネルの番号
      • グレースケールでは、要素数は1です。
      • BGR色空間 / HSV色空間では、要素数は3です。
      • アルファチャネルがあるときは、要素数は +1 されます。

BGRカラー画像

BGRカラー画像では上記の通り第1軸~第3軸までが定義されています。
横(=X軸) 2000ピクセル、縦(=Y軸) 1500ピクセルのBGRカラー画像img_colorは

  • 第1軸(Y座標) → 要素数(=ピクセル数):1500
  • 第2軸(X座標) → 要素数(=ピクセル数):2000
  • 第3軸(カラーチャネル) → 要素数(=カラーチャネル数):3

であり、

print(type(img_color))    # → <class 'numpy.ndarray'>
img_color.shape           # → (1500, 2000, 3)

となります。
アルファチャネルがある場合は、第3軸のカラーチャネルの要素数が4つになるだけで、ほかは変わりありません。

画素値へのアクセス

  • 第1軸でY座標、第2軸でX座標、第3軸で注目するカラーチャネルを指定することで、その画素値にアクセスできます。
画像 img に対して座標(x, y)におけるBGR値img[y, x] → タプルとして(B, G, R)が取得される
画像 img の座標(x, y)の赤(R)の画素値img[y, x, 2] → 整数で画素値が取得される
画像 img の座標(x, y)にBGR値(255, 0, 0)を設定するimg[y, x, :] = (255, 0, 0)
画像の赤の色成分だけすべて0に設定するimg[ : , : , 2] = 0

グレースケール画像

グレースケール画像では上記の軸のうち、第1軸・第2軸のみが定義されています。
横(=X軸) 2000ピクセル、縦(=Y軸) 1500ピクセルのグレースケール画像img_grayは

  • 第1軸(Y座標) → 要素数(=ピクセル数):1500
  • 第2軸(X座標) → 要素数(=ピクセル数):2000

であり

print(type(img_color))    # → <class 'numpy.ndarray'>
img_color.shape           # → (1500, 2000)

となります。

画素値へのアクセス

画像 img に対して座標(x, y)における画素値img[y, x] → 画素値が整数で得られる

まとめ

画素値へのアクセスの方法をまとめました。X座標・Y座標の順番や、色空間の要素の順番などに注意してください。

関連記事・スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です