OpenCV - cvtColor不会改变颜色空间,它会改变颜色

时间:2016-05-15 18:29:32

标签: c++ opencv hsv bgr

我正在尝试使用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制作了下面的测试图片:

Test image

我得到了这张图片:

HSV image - result

我决定尝试从BGR转换为RGB,将BGR2HSV更改为BGR2RGB,并使用相同的测试图像,我得到此结果

RGB image - result

在这里,更清楚的是图像的通道直接改变了......

有没有人知道这里发生了什么?

2 个答案:

答案 0 :(得分:1)

功能imwrite并不关心颜色空间垫有什么,并且不存储此信息。根据文件它的BGR命令。

所以在保存图像之前,你应该确定它是BGR。

如果您真的想将图像保存为HSV使用file storages

答案 1 :(得分:-1)

试试这个:

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