OpenCV C ++中的透明像素(使用GrabCut时)

时间:2014-07-10 07:47:58

标签: c++ opencv

我正在使用OpenCV的GrabCut实现,以便从图像中删除背景。但目前新的背景是黑色的。有没有办法让它变得透明? 现在,这部分代码如下所示:

Mat binMask( image.size(), CV_8UC1 );
binMask = mask & 1;
image.copyTo( result, binMask );

我能以某种方式用透明像素填充binMask吗? 我已经阅读了一些覆盖图像的教程,但我不需要在我的图片前面有透明的图像,而是在后面。 我希望有人可以提供帮助。 非常感谢!

1 个答案:

答案 0 :(得分:3)

由于您使用的是8UC1图像类型,因此无法使用透明像素。 只有当您有alpha通道且alpha设置为0时才允许这些:您必须使用4通道图像(3表示颜色,1表示Alpha通道)。 alpha通道支持文件格式,如PNG,但不支持JPG。

在屏蔽的情况下,您不需要使用透明像素的方式,因为黑色实际上对应于0并且当您混合两个时它们不会影响结果图像(例如addWeighted,或者在bitwise_or操作的情况下)。