プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

色空間変換時の注意点

OpenCVによる色空間変更の際の注意点。

cvCvtColorによる色空間変更時に、変換タイプを指定する。たとえば、bmpファイルを読み込んだものを、CIE L*a*b*に変更する場合、次のようなコードを書くと思う。

IplImage * p_img = cvLoadImage("filename.bmp", CV_LOAD_IMAGE_COLOR);
IplImage * p_dst = cvCreateImage( cvSize(p_img->width, p_img->height), p_img->depth, _img->nchannels);
cvCvtColor(p_img, p_dst, CV_BGR2Lab);
この際のcvCvtColorの色空間の変換方法として、RGB色空間からL*a*b*へ変更する場合、CV_RGB2LabとCV_BGR2Labがある。通常(Windowsの場合)、bmpフォーマットのファイルを読み込んだ場合、IplImageのデータの並びは、B,G,Rの順番になっているので、CV_BGR2Labを指定しないと、正しく色変換されない。

ちなみにマニュアルにも記載されているが、L*の値は範囲が0-100であるが、出力画像の色深度が8bit(unsigned char) の場合、0-255になるようにスケーリングされているので、色空間での距離を求める場合には、スケールを元に戻してから計算する必要がある。

なお、cvCvtColorやその他のOpenCV関数の使い方の詳細は、OpenCVのリファレンスマニュアル参照。

(参考)

OpenCVリファレンスマニュアル

http://opencv.jp/opencv-1.0.0/document/index.html