2017-03-08 72 views
-1

我想這個代碼片段:OpenCV的 - 去色的灰度圖像不起作用

img = cv2.imread(os.path.join(RUTA_IMAGEN, 'probetas2small.jpg'),0) 
cv2.imwrite(os.path.join(RUTA_IMAGEN, 'processed1.jpg'), img); 
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) 
cv2.imwrite(os.path.join(RUTA_IMAGEN, 'processed2.jpg'), cimg); 

最初的形象「probetas2small.jpg」是彩色的。 圖片'processed1.jpg'也是灰色,'processed2.jpg'也是...

如何將初始處理圖像再次轉換爲顏色?

(對不起,我的英語)

回答

1

您can't.When你從彩色轉換爲灰色,您丟失信息,所以操作的其他方式是不可能的。

將顏色轉換爲灰色(這就是你在第一行中通過在末尾使用帶有標誌零的imread進行的操作)的操作如下所示:對於每個像素,其中[b,g,r]在img ,其值將只有一個數字,等於0.299 * r + 0.587 * g + 0.114 * b。你失去了b,g和r的個體價值。
因此不可能轉換回(視覺)彩色圖像(您試圖做的cv2.cvtColor())。就好像我給你一個數字(比如說43),問你「爲了得到43,我計算了哪3個數字?」。你不能回答這個問題,cv2.cvtColor()也不能。此功能所做的僅僅是產生3通道圖像,但每個通道具有相同的值,從而在結構上給出彩色圖像,但是灰度級圖像是

(感謝丹在正確的公式RGB的意見>灰色)

+0

灰度值也不會「像平均值」,這將是'0.299 * R + 0.587 * G + 0.114 * B' - 請參閱[文檔](http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html#cvtcolor)。 –

+0

感謝您的澄清,我不確定。編輯我的答案。 – Soltius

0

的問題是,當你加載probetas2small.jpgimg,你已經將其轉換爲灰色。取而代之的

img = cv2.imread(os.path.join(RUTA_IMAGEN, 'probetas2small.jpg'),0) 

其中0表示「讀成灰色」,你應該做的

img = cv2.imread(os.path.join(RUTA_IMAGEN, 'probetas2small.jpg'))