LoginSignup
21
8

More than 3 years have passed since last update.

OpenCVでHSV色空間のHueを扱う時の注意点

Last updated at Posted at 2019-08-04

OpenCVで物体識別を行う際に、OpenCVのHSV色空間、特にHueの扱いではまったので、まとめておく。

まとめ

  • Hueは0から179の範囲を取る。
  • 他のアプリケーションではHueは0から360を取る場合もある。その場合は、OpenCVでデータを読み書きする時にHueを2倍するか1/2倍にする。
  • 0から179の範囲外でも動くけど混乱の元なので、0から179のレンジに収める。

OpenCVの仕様

For HSV, Hue range is [0,179], Saturation range is [0,255] and Value range is [0,255]. Different softwares use different scales. So if you are comparing OpenCV values with them, you need to normalize these ranges.

以下のように書いてある。
- OpencCVの場合、HSVではHueは0から179、Saturationは0から255、Valueは0から255の範囲だよ
- 他のアプリケーションと範囲違うかもよ
- 正規化(0から179の範囲に合わせてから)して使ってね

画像処理ソフトではHueは0から360を取るケースが多いようなので、OpenCV側で2倍するか1/2倍にする。

RGB、CMYK、Hue(0-360)、Hue(Opencv)の早見表

HSVのS、Vの値を最大値とした場合の早見表(S=100 or 360、V=100 or 360で固定)

RGB 16進数表記 RGB(0-255) CMY(0-100) H(H=0-360) Hue(OpenCV H=0-179)
#ff0000 (255,0,0) (0,100,100) 0 0
#ff7f00 (255,128,0) (0,50,100) 30 15
#ffff00 (255,255,0) (0,0,100) 60 30
#80ff00 (128,255,0) (50,0,100) 90 45
#00ff00 (0,255,0) (100,0,100) 120 60
#00ff80 (0,255,128) (100,0,50) 150 75
#00ffff (0,255,255) (100,0,0) 180 90
#0080ff (0,128,255) (100,50,0) 210 105
#0000ff (0,0,255) (100,100,0) 240 120
#8000ff (128,0,255) (50,100,0) 270 135
#ff00ff (255,0,255) (0,100,0) 300 150
#ff0080 (255,0,128) (0,100,50) 330 165
#ff0000 (255,0,0) (0,100,100) 360 n/a

Hueに範囲外の値を指定した場合

以下の図は、OpenCVでHueに0から700の値を指定した場合(横軸がHue)。
256、512のところで0(赤色)に戻っている。
image.png

これから分かるようにHueが256以上になると0に戻る。
180から255までは見た目問題なく動作するけど、256以上は想定と違う動作になる。
混乱の元になるので、OpenCVではHueは0から179で使うこと。

21
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
8