2016-05-15 300 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圖像返回廢話。 –