2011-10-11 82 views
3

我有一個3通道IplImage。我想創建一個4通道圖像,並將alpha通道設置爲小於1.0的值以使其半透明。openCV:爲IplImage添加透明度

首先我設置alpha通道(4個通道),以0.5:

cvSet(Image_c4, cvScalar(0,0,0,0.5); 

這裏是我用於將3通道映像複製到4通道的圖像的命令。

cvCvtColor(Image_c3, Image_c4, CV_RGB2RGBA); 

問題:Image_c3是彩色的。 Image_c4變成Image_c3的灰度副本(並且沒有透明度)。

更新: 原來,上面的代碼實際上是正確的,工程和實際上是更簡潔比下面的答案建議的解決方案。我在其他地方有一個無關的錯誤。

回答

5

也許有另一種方式,但我想補充的透明度是這樣的:

// BGR split 
cvSplit(im1_bgr, im1_b, im1_g, im1_r, NULL); 

// Alpha channel creation (transparency) 
IplImage *im1_a = cvCreateImage(cvGetSize(im1_bgr), 8, 1); 
// Set the alpha value 
cvSet(im1_a, cvScalar(128), NULL); 

// Merge the 4 channel to an BGRA image 
IplImage *im1_bgra = cvCreateImage(cvGetSize(im1_bgr), 8, 4); 
cvMerge(im1_b, im1_g, im1_r, im1_a, im1_bgra); 
+1

感謝您抽出時間回覆。事實證明,我的問題中的代碼實際上是正確的,我有另一個無關的錯誤。你的代碼也是正確的,但cvCvtColor做同樣的事情,但它更簡單。 – RawMean

0
//This code help to make a transparency image But it take src image as one //single color background see![Removing background and added black background color ][1] 
Mat dst;//(src.rows,src.cols,CV_8UC4); 
Mat tmp,alpha; 

cvtColor(src,tmp,CV_BGR2GRAY); 
threshold(tmp,alpha,0,255,THRESH_BINARY); 

Mat rgb[3]; 
split(src,rgb); 

Mat rgba[4]={rgb[0],rgb[1],rgb[2],alpha}; 
merge(rgba,4,dst); 
imwrite("dst.png",dst); 
//dst is transparency image see here![output image as transparency image][2] 


    [1]: http://i.stack.imgur.com/9THqs.png 
    [2]: http://i.stack.imgur.com/mpmgy.png