2016-05-15 256 views
0

我想使用OpenCV 3.1.0和C++在这个Python例子之后创建一个对象跟踪器:http://docs.opencv.org/3.1.0/df/d9d/tutorial_py_colorspaces.html#gsc.tab=0OpenCV - 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测试图像:

Test image

我得到这个形象的结果:

HSV image - result

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

RGB image - result

这里,它更清晰的图像的通道被直接更改...

有没有人对这里发生了什么什么想法?

+2

在第二图像,你解释[HSV图像(https://en.wikipedia.org/wiki/HSL_and_HSV)的通道(即色调,饱和度,值)分别为蓝色,绿色和红色。你期望得到什么结果(imwrite预计BGR)? –

+0

基本上你没有注意到['imwrite()'](http://docs.opencv.org/3.0-beta/modules/imgcodecs/doc/reading_and_writing_images.html#imwrite)文档中的重要信息:“只有8位... 3通道(带有'BGR'通道顺序)图像可以使用此功能保存。“ –

+0

非常感谢你丹!我真的没有检查,我认为这个问题是在转换,我没有检查imwrite()函数。再次感谢你! – user3368457

回答

1

功能imwrite不在乎有什么颜色空间垫子此信息不保存。根据文件它是BGR订单。

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

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

-1

试试这个:

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

这将与OP示例中的最后3行具有相同的效果。它也没有回答他的问题,这不是理解为什么用'imwrite'保存HSV图像返回废话。 –