Я пытаюсь сделать отслеживание объектов с помощью OpenCV 3.1.0 и C++, следующих за этим примером Python: 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 является CV_8UC3, совместимый с cvtColor() и должен быть первоначально в BGR цветовом.
Я сделал тестовое изображение ниже с GIMP:
И я получаю это изображение как результат:
я решил попробовать преобразование из BGR в RGB, меняя BGR2HSV на BGR2RGB, и с тем же тестовым изображением, получаю этот результат
Вот, это более ясно, что каналы изображения изменяются непосредственно ...
Кто-нибудь какие-либо идеи о том, что здесь происходит?
На втором изображении, вы интерпретации каналов [HSV изображения] (https://en.wikipedia.org/wiki/HSL_and_HSV) (то есть Hue, Saturation, Value) как синий, зеленый и красный соответственно. Что вы ожидали получить в результате (imwrite ожидает BGR)? –
В основном вы не заметили эту важную информацию в документации ['imwrite()'] (http://docs.opencv.org/3.0-beta/modules/imgcodecs/doc/reading_and_writing_images.html#imwrite): " С помощью этой функции можно сохранить только 8-битные ... 3-канальные (с порядком канала BGR). " –
Спасибо тебе большое! Я действительно не проверял это, я думал, что проблема была в преобразовании, и я не проверял функцию imwrite(). Еще раз спасибо! – user3368457