Java OpenCV:如何仅保持透明像素并将其设置为白色?

Java OpenCV:如何仅保持透明像素并将其设置为白色?,java,python,android,opencv,Java,Python,Android,Opencv,我有一个inputMat(RGBA格式)。我只想保留透明像素,并将它们设置为白色。所有其他像素(因此是不透明的)应更改为透明 我的Java代码的开头: Mat inputMat = new Mat(); Utils.bitmapToMat(bitmap, inputMat); 我怎样才能做我想做的事?(所有语言的答案-不仅仅是Java-接受!) 谢谢 这就是想法 Mat inputMat = new Mat(); Utils.bitmapToMat(bitmap, inputMat); 将图

我有一个inputMat(RGBA格式)。我只想保留透明像素,并将它们设置为白色。所有其他像素(因此是不透明的)应更改为透明

我的Java代码的开头:

Mat inputMat = new Mat();
Utils.bitmapToMat(bitmap, inputMat);
我怎样才能做我想做的事?(所有语言的答案-不仅仅是Java-接受!)

谢谢

这就是想法

Mat inputMat = new Mat();
Utils.bitmapToMat(bitmap, inputMat);
将图像分割到频道:

List<Mat> channels = new ArrayList<>(4);
Core.split(inputMat, channels);
List<Mat> channelsOut = new ArrayList<>();
channelsOut.add(alpha);
channelsOut.add(alpha);
channelsOut.add(alpha);
channelsOut.add(alpha);
反转alpha通道:

Mat alpha = channels.get(3);
Core.bitwise_not(alpha,alpha);
制作新的频道列表:

List<Mat> channels = new ArrayList<>(4);
Core.split(inputMat, channels);
List<Mat> channelsOut = new ArrayList<>();
channelsOut.add(alpha);
channelsOut.add(alpha);
channelsOut.add(alpha);
channelsOut.add(alpha);

OpenCV的Mat类有一个采用掩码参数的
setTo
方法。 OpenCV具有可分离颜色平面(通道)的
split
过程。 垫子支撑。 OpenCV垫支持“正常”

assert input.shape[2]==4,“这不是一张四通道图片”
alpha=输入[…,3]#选择alpha平面
assert((alpha==0)|(alpha==255)).all(),“假设alpha值为二进制”
mask=(alpha==0)#表示透明像素的布尔数组
#改变输入;如果需要一个新数组,请复制它或创建一个相同形状的空数组
输入[遮罩]=(255、255、255、255)#白色,不透明
#~mask将面具倒置
输入[~mask]=(0,0,0,0)#设置透明、清晰的颜色信息

反转Alpha通道?(并可能复制到所有4个频道)您可以帮助编写一些代码吗?我是OpenCV的新手:)谢谢!谢谢。你救了我的命!:)Java没有numpy。问题是如何使用opencv做到这一点。引用问题的一部分:“(所有语言的答案——不仅仅是Java——都可以接受!)”