透明像素在opencvc++(当使用GrabCut)

Transparent pixels in OpenCV C++ (when using GrabCut)

本文关键字:GrabCut 像素 opencvc++ 透明      更新时间:2023-10-16

我正在使用OpenCV的GrabCut实现,以便从图像中删除背景。但是现在新的背景是黑色的。有没有办法让它透明?现在这部分代码看起来像这样:

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

我可以用透明像素填充binMask吗?我已经阅读了一些关于叠加图像的教程,但是我不需要在我的图片前面有一个透明的图像,而是在后面。我希望有人能帮忙。很多谢谢!

由于您使用的是8UC1图像类型,因此不可能具有透明像素。只有当你有一个alpha通道,alpha设置为0时才允许这样做:你必须使用一个4通道的图像(3个用于颜色,1个用于alpha通道)。alpha通道支持PNG等文件格式,但不支持JPG。

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