0

この Python の例に従って、OpenCV 3.1.0 と C++ を使用してオブジェクト トラッカーを作成しようとしています: http://docs.opencv.org/3.1.0/df/d9d/tutorial_py_colorspaces.html#gsc.tab=0

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 は CV_8UC3 で、cvtColor() と互換性があり、元は BGR 色空間にある必要があります。

GIMPで以下のテスト画像を作成しました:

テスト画像

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

HSV 画像 - 結果

BGR2HSVをBGR2RGBに変更して、BGRからRGBへの変換を試みることにしました。同じテスト画像で、この結果が得られました

RGB イメージ - 結果

ここでは、画像のチャンネルが直接変更されていることがより明確です...

ここで何が起こっているかについて誰か知っていますか?

4

2 に答える 2

1

関数imwriteはマットの色空間を気にせず、この情報は保存されません。ドキュメントによると、それは BGR オーダーです。

したがって、画像を保存する前に、それが BGR であることを確認する必要があります。

画像をHSVとして保存したい場合は、ファイルストレージを使用してください

于 2016-05-16T09:20:54.943 に答える
-1

これを試して:

// From BGR to HSV
Mat hsv_image;
cvtColor(original_image, hsv_image, COLOR_BGR2HSV);
imwrite("hsv_image.png", hsv_image);
于 2016-05-15T18:38:42.700 に答える