OpenCVによる色空間変更の際の注意点。
cvCvtColorによる色空間変更時に、変換タイプを指定する。たとえば、bmpファイルを読み込んだものを、CIE Lab*に変更する場合、次のようなコードを書くと思う。
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色空間からLab*へ変更する場合、CV_RGB2LabとCV_BGR2Labがある。通常(Windowsの場合)、bmpフォーマットのファイルを読み込んだ場合、IplImageのデータの並びは、B,G,Rの順番になっているので、CV_BGR2Labを指定しないと、正しく色変換されない。
ちなみにマニュアルにも記載されているが、L*の値は範囲が0-100であるが、出力画像の色深度が8bit(unsigned char) の場合、0-255になるようにスケーリングされているので、色空間での距離を求める場合には、スケールを元に戻してから計算する必要がある。
なお、cvCvtColorやその他のOpenCV関数の使い方の詳細は、OpenCVのリファレンスマニュアル参照。
(参考) OpenCVリファレンスマニュアル