プロが教える店舗&オフィスのセキュリティ対策術

OpenCVを使って任意の画像データをBGR表色系からHSV表色系に変換するプログラムです。
コンパイルして実行してみたところ、添付画像のように元画像とは色味が異なった画像が出力されてしまいます。
他の画像ファイルを使ってみましたが結果は同じでした。
HSVへの変換がうまくいってないのでしょうが、調べても原因は分かりませんでした。
どなたか分かる方がいらっしゃいましたらご指摘お願いします。

以下にコードを載せます。

#include <cv.h>
#include <highgui.h>

int main (int argc, char **argv){
IplImage *src_img=0; // 入力画像
IplImage *hsv_img=0; // hsvに変換された画像

// (1)画像を読み込む
src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);

// (2)読み込んだ画像をhsvに変換する
hsv_img = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_8U, 3);
cvCvtColor (src_img, hsv_img, CV_BGR2HSV);

// (3)画像を表示,キーが押されたときに終了
cvNamedWindow ("Source_Image", CV_WINDOW_AUTOSIZE);
cvNamedWindow ("HSV_Image", CV_WINDOW_AUTOSIZE);
cvShowImage ("Source_Image", src_img);
cvShowImage ("HSV_Image", hsv_img);
cvWaitKey (0);

// (4)メモリ解放
cvDestroyWindow ("Source_Image");
cvDestroyWindow ("HSV_Image");
cvReleaseImage (&src_img);
cvReleaseImage (&hsv_img);

return 0;
}

OS:Windows7
OpenCVのバージョン:2.1
添付画像で用いた画像の形式:png

「【OpenCV】BGRからHSVへの画像」の質問画像

A 回答 (2件)

画像を見ての通り正しく変換されていると思われますが、何か問題があるのでしょうか?



HSV画像をcvShowImageすればこうなります。
    • good
    • 0
この回答へのお礼

素早い返答ありがとうございます。
なるほど、表色系が変わるだけで出力画像は変わらないものだと思っていました。

お礼日時:2010/12/27 23:36

cvCvtColorで変換したものは、別に色空間情報を持っているわけではありません。


CV_BGR2HSV で変換した前も後も「3チャンネルの画像」でしかありません。

cvShowImageは BGRの3チャンネル画像をカラー表示することはできますが、HSVの画像から色を復元するようなことはしません。
そもそも、画像がBGRなのがHSVなのか判断できないのですから。
    • good
    • 0
この回答へのお礼

BGRからHSVに変換されても“見た目の色”は同じであるというわけではないのですね。
詳しい説明をありがとうございました。

お礼日時:2010/12/27 23:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!