2016-05-15 17 views
0

OpenCV 3.1.0とC++を使ってオブジェクトトラッカーを作成しようとしています。http://docs.opencv.org/3.1.0/df/d9d/tutorial_py_colorspaces.html#gsc.tab=0です。OpenCV - cvtColorは色空間を変更しません。色が変わります。

cvtColor()関数には色空間を変更するのではなく、画像の色を変更するためにいくつかの問題があります。私はこのコードを持っている:

Mat original_image; 
original_image = imread(argv[1], CV_LOAD_IMAGE_COLOR); // The image is passed as arg 
if (!original_image.data) 
{ 
    printf("Problem!\n"); 
    return -1; 
} 

// From BGR to HSV 
Mat hsv_image(original_image.rows, original_image.cols, original_image.type()); 
cvtColor(original_image, hsv_image, CV_BGR2HSV); 
imwrite("hsv_image.png", hsv_image); 

original_imageがcvtColorと互換性がCV_8UC3、()で、BGRの色空間にもともとある必要があります。

私はGIMPと下のテスト画像作ら:

Test image

をそして私は、結果として、この画像を取得する:

HSV image - result

私はRGBへのBGRからの変換をしようとすることを決めました、 BGR2HSVをBGR2RGBに変更し、同じテスト画像でこの結果を得る。

ここ

は、それが

は誰を持っています...画像のチャンネルが直接変更されていることをより明確だ、ここで何が起こっているのかについての任意のアイデア?

+2

を使用して画像を保存したい場合は、([HSV画像](https://en.wikipedia.org/wiki/HSL_and_HSV)のチャンネルを解釈しています色相、彩度、値)をそれぞれ青、緑、赤として表示します。結果として何を得ることが期待されましたか(imwriteはBGRを期待しています)? –

+0

基本的には、この重要な情報は、['imwrite()'](http://docs.opencv.org/3.0-beta/modules/imgcodecs/doc/reading_and_writing_images.html#imwrite)のドキュメントで気付かなかった:この機能を使用して、8ビット... 3チャンネル( 'BGR'チャンネル順)の画像のみを保存することができます。 –

+0

Danさんありがとう!私は実際にそれをチェックしなかった、私は問題が変換にあったと思っていたし、imwrite()関数をチェックしなかった。ありがとうございました! – user3368457

答えて

1

機能imwriteはスペースマットがあり、この情報が格納されていないものを色を気にしません。ドキュメントによると、それはBGR命令です。

イメージを保存する前に、それがBGRであることを確認する必要があります。

あなたは本当にHSVは、第二の画像ではfile storages

-1

はこれを試してみてください:

// From BGR to HSV 
Mat hsv_image; 
cvtColor(original_image, hsv_image, COLOR_BGR2HSV); 
imwrite("hsv_image.png", hsv_image); 
+0

OPの例の最後の3行と同じ効果があります。また、彼の質問に答えることはできません。なぜなら、 'imwrite'を使ってHSV画像を保存するのはナンセンスを返す理由を理解していないからです。 –

関連する問題