OpenCV cvCvtColor - eiichiromomma/CVMLAB GitHub Wiki

(OpenCV) cvCvtColor

色空間の変換

OpenCV HSVtoRGBも参照

cvCvtColor

定義

void cvCvtColor( const CvArr* src, CvArr* dst, int code );
  • src
    • 元画像 unsigned な8bit,16bit, 浮動小数点 32f(float) の画像
  • dst
    • 出力画像。srcと同じ型であること
  • code
    • 色空間の指定 CV_<src_color_space>2<dst_color_space> で表記

code

  1. RGB<=>CIE XYZ.Rec 709 with D65 white point (CV_BGR2XYZ, CV_RGB2XYZ, CV_XYZ2BGR, CV_XYZ2RGB):
  2. RGB<=>YCrCb JPEG (a.k.a. YCC) (CV_BGR2YCrCb, CV_RGB2YCrCb, CV_YCrCb2BGR, CV_YCrCb2RGB)
  3. RGB<=>HSV (CV_BGR2HSV, CV_RGB2HSV, CV_HSV2BGR, CV_HSV2RGB)
  4. RGB<=>HLS (CV_BGR2HLS, CV_RGB2HLS, CV_HLS2BGR, CV_HLS2RGB)
  5. RGB<=>CIE Lab* (CV_BGR2Lab, CV_RGB2Lab, CV_Lab2BGR, CV_Lab2RGB)
  6. RGB<=>CIE Luv* (CV_BGR2Luv, CV_RGB2Luv, CV_Luv2BGR, CV_Luv2RGB)
  7. Bayer=>RGB (CV_BayerBG2BGR, CV_BayerGB2BGR, CV_BayerRG2BGR, CV_BayerGR2BGR,CV_BayerBG2RGB, CV_BayerGB2RGB, CV_BayerRG2RGB, CV_BayerGR2RGB)

2.2以降の注意点

リリースの変更点 より

  • RGB->Lab & RGB->Luv performance has been noticeably improved. Now the functions assume sRGB input color space (e.g. gamma=2.2). If you want the original linear RGB->L** conversion (i.e. with gamma=1), use CV_LBGR2LAB etc.
  • VNG algorithm for Bayer->RGB conversion has been added. It's much slower than the simple interpolation algorithm, but returns significantly more detailed images
  • The new flavors of RGB->HSV/HLS conversion functions have been added for 8-bit images. They use the whole 0..255 range for the H channel instead of 0..179. The conversion codes are CV_RGB2HSV_FULL etc.

とあるように

  • RGBからCIE LabおよびCIE Luvへの変換は例えばgamma=2.2のようなsRGB色空間からの変換が標準となり、民生の撮像機器の場合はガンマ補正が不要となった。従来のgamma=1のリニアなRGBからの変換はCV_LBGR2LABのように”L”を頭に付けて処理させる。
  • Bayerを使う場合、補間アルゴリズムの改善によりやや低速化。
  • HSVやHLSのような色相Hueを使う空間では出力が0179で循環しているが、0255で循環する変換が追加された。たとえばCV_RGB2HSB_FULLのように"_FULL"が付く。

の3点に注意。特に1番目については既存の機能を置き換えているので、従来と結果が異なるためプログラムの変更が必要となる。

注意点

Labとかの0~xではない値を持つ表色系にしたい場合は、unsigned 8bit, 16bitだと原点をシフトして扱う仕様なので要注意。 何も考えずに扱いたいなら32fの画像を作った方が楽。

IplImageはBGRなのでCV_BGR2*を使うこと。