2012-11-29 112 views
1

我正在使用opencv 2.4和numpy。我想打開一張圖片並獲取有關它的所有信息(8位 - 如果它的RGB-BGR等),並嘗試更改顏色空間。 我有這樣的代碼:如何將圖像從BGR轉換爲LAB與opencv 2.4 python 2.7和numpy

if __name__ == '__main__': 
    img = cv2.imread('imL.png') 
    conv= cv2.cvtColor(img, cv2.COLOR_BGR2LAB) 
     cv2.imwrite('lab.png', conv) 

當我打開文件lab.png我得到的圖像以不同的顏色! 我檢查BGR的LAB值:http://www.brucelindbloom.com/

爲此,我想知道關於一個圖像的所有信息。

回答

3

由於imwrite()以指定格式(PNG,JPEG 2000和TIFF)單通道或3通道(具有'BGR'通道順序)保存文件,所以您將獲得不同的圖像顏色。可以使用此功能保存圖像。 imwrite()不知道LAB保存圖像的格式,因爲它總是期望BGR中的圖像。 如果格式,深度或通道順序不同,請在保存前使用Mat :: convertTo()和cvtColor()進行轉換。

+0

謝謝!我猜測,我也試過PIL庫,但看起來它不支持LAB。 但也MAT:convertTo()看起來只適用於c + +我沒有找到任何與python的例子。我是誰? – Gianfra

+0

你可以看看python等價的MAT :: convertTo()cv.Convert(src,dst)。它使用可選的縮放比例將一個數組複製到另一個數組,其中第一個執行和/或可選的類型轉換,之後執行。如果您希望更改8U圖像浮動或反之亦然,這很有用。 – isrish

+1

恐怕用opencv 2.4是不可能的,因爲你可以看到你寫了cv.Convert(src,dst)。另外谷歌我沒有在文檔中找到。 http://docs.opencv.org/modules/core/doc/basic_structures.html#void Mat :: convertTo(OutputArray m,int rtype,double alpha,double beta)const 感謝您的回答! – Gianfra

2

Lab是另一種顏色空間,就像從cv2.imread()獲得的BGR顏色空間一樣。就像你將溫度從華氏溫度轉換成攝氏溫度一樣。華氏溫度和0攝氏度是相同的溫度,但在不同的單位。

cv2.imwrite()不知道這些值是否在BGR色彩空間中。當它得到一個三維數組時,它假定它是一個BGR色彩空間,而你的conv變量包含Lab色彩空間。這就是爲什麼你的圖像顏色改變了。

對於您的信息,BGR色彩空間的每個圖層都包含藍色,綠色和紅色,而Lab的圖層分別包含亮度(0-100),a *和b *。有關更多信息,請參閱Wikipedia中的「Lab色彩空間」。

+0

我知道實驗室的顏色是什麼。 我擔心的是價值的匹配是不對的。 我在本網站檢查BGR到LAB的價值:http://www.brucelindbloom.com/ 他們是不同的! 順便說一句,我發現你將圖像保存爲float32,然後您將LAB轉換爲值匹配,所以我認爲問題是在開始時圖像保存在uint8 – Gianfra

相關問題