【问题标题】:openCV: adding transparency to IplImageopenCV:为 IplImage 添加透明度
【发布时间】:2011-10-11 06:44:43
【问题描述】:

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

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

【问题讨论】:

    标签: opencv alpha-transparency


    【解决方案1】:

    也许还有另一种方法,但我会像这样添加透明度:

    // 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);
    

    【讨论】:

    • 感谢您抽出宝贵时间回复。事实证明,我的问题中的代码实际上是正确的,而且我还有另一个不相关的错误。您的代码也是正确的,但是 cvCvtColor 做同样的事情,但它更简单。
    【解决方案2】:
    //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
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 2011-09-16
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多