最近做的项目中,在分割出来手之后,想让手呈现出一个逐渐透明的效果。具体请看下图
开始时想要四通道,通过改变alpha值,但是在视频中看不到任何变化,只有存下某一帧,然后保存成png格式,在项目外打开时才能看到效果。
经过其他尝试,终于找到一种方法。同样用到opencv库,C#语言代码如下:
cirmask = to3channels(cirmask);//mask掩膜,根据需要的透明不同取值为0~255,将一通道转为三通道,函数是自己写的,这个可以百度查到怎么写
result1.convertTo(result1, CvType.CV_32FC3);//前景的格式转换
result2.convertTo(result2, CvType.CV_32FC3);//背景的格式转化
cirmask.convertTo(cirmask, CvType.CV_32FC3, 1.0 / 255);//mask格式转化并作归一化
result3 = Mat.zeros(result1.size(), result1.type());//输出的结果图
result1 = result1.mul(cirmask);//前景和mask对应点的位置相乘,可百度mul用法
result2 = result2.mul(Scalar.all(1.0) - cirmask);//背景和1-mask对应点的位置相乘
Core.add(result1, result2, result3);//叠加
result3.convertTo(result3, CvType.CV_8UC3);//输出只接受8U格式,所以再进行转换