openCV:为IplImage添加透明度

时间:2011-10-11 06:44:44

标签: opencv alpha-transparency

我有一个3通道的IplImage。我想创建一个4通道图像,并将其alpha通道设置为小于1.0的值,使其半透明。

首先我将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的灰度副本(并且没有透明度)。

更新: 事实证明,上面的代码实际上是正确的,并且实际上比下面的答案中的建议解决方案更简洁。我在其他地方有一个无关的错误。

2 个答案:

答案 0 :(得分: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 :(得分: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