OpenCV — cvtColor не меняет цветовое пространство, он меняет цвета

Я пытаюсь создать объектный трекер, используя OpenCV 3.1.0 и C ++, следуя примеру Python: 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 изображение - результат

Я решил попробовать преобразование из BGR в RGB, изменив BGR2HSV на BGR2RGB, и с тем же тестовым изображением я получаю этот результат

RGB изображение - результат

Здесь более понятно, что каналы изображения меняются напрямую …

Кто-нибудь имеет представление о том, что здесь происходит?

0

Решение

функция imwrite не важно, какой цветовой коврик есть, и эта информация не сохраняется. Согласно документации это заказ BGR.

Поэтому перед сохранением изображения убедитесь, что это BGR.

Если вы действительно хотите сохранить изображение в формате HSV хранилища файлов

1

Другие решения

Попробуй это:

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector