• ベストアンサー
  • 困ってます

【OpenCV】BGRからHSVへの画像変換

  • 質問No.6408838
  • 閲覧数6611
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 100% (2/2)

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

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 55% (1857/3366)

cvCvtColorで変換したものは、別に色空間情報を持っているわけではありません。
CV_BGR2HSV で変換した前も後も「3チャンネルの画像」でしかありません。

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

お礼率 100% (2/2)

BGRからHSVに変換されても“見た目の色”は同じであるというわけではないのですね。
詳しい説明をありがとうございました。
投稿日時:2010/12/27 23:43

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 80% (4/5)

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

HSV画像をcvShowImageすればこうなります。
お礼コメント
Klein0x79

お礼率 100% (2/2)

素早い返答ありがとうございます。
なるほど、表色系が変わるだけで出力画像は変わらないものだと思っていました。
投稿日時:2010/12/27 23:36
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ