Я пытаюсь создать объектный трекер, используя 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:
И я получаю это изображение в результате:
Я решил попробовать преобразование из BGR в RGB, изменив BGR2HSV на BGR2RGB, и с тем же тестовым изображением я получаю этот результат
Здесь более понятно, что каналы изображения меняются напрямую …
Кто-нибудь имеет представление о том, что здесь происходит?
функция imwrite
не важно, какой цветовой коврик есть, и эта информация не сохраняется. Согласно документации это заказ BGR.
Поэтому перед сохранением изображения убедитесь, что это BGR.
Если вы действительно хотите сохранить изображение в формате HSV хранилища файлов
Попробуй это:
// From BGR to HSV
Mat hsv_image;
cvtColor(original_image, hsv_image, COLOR_BGR2HSV);
imwrite("hsv_image.png", hsv_image);