头像
KazamaSion
帖子: 29
注册时间: 2016-08-22 6:36

【已解决】如何正确地获取图像的透明通道?

2016-09-05 9:37

先贴测试代码:(视频加载过程省略),hav.Overlay使用的是havsfunc中的Overlay

代码: 全选

image = r"D:\test1.png" #此处为原图 artifical_alpha = r"D:\test1mask.png" #此处为使用Photoshop人工生成的alpha通道 [image, mask] = core.imwri.Read(filename = image, alpha = True) clip = core.resize.Spline36(clip, format = vs.RGB48) image = core.resize.Spline36(image, format = vs.RGB48) [mask2, alpha] = core.imwri.Read(filename = artifical_alpha alpha = True) #这里只是用来提取人工生成的alpha通道 mask = core.resize.Spline36(mask, format = vs.GRAY16) alpha = core.resize.Spline36(alpha, format = vs.GRAY16) mask = core.std.Invert(mask) clip = haf.Overlay(clipa = clip, clipb= image, x=0, y=0, mask=mask) #clip = haf.Overlay(clipa = clip, clipb= image, x=0, y=0, mask=alpha) def output(x): return{ 'a':clip, 'b':image, 'c':mask, 'd':alpha, }.get(x,image).set_output() output("c")
源文件:
图片
人工抽取的mask:(确定是用纯黑色对透明部分涂抹并涂抹完全)
图片

问题描述:
1. 无论是通过人工提取出的alpha通道还是用脚本提取的均出现箭头所示问题:
红黑色矩形图形应该是完全不透明的,但是在实际应用的时候却出现了透明的情况
图片


2. 人工提取的透明通道和脚本提取的透明通道不一致:
注意透明度是有区别的
图片


抽出的透明通道:
alpha:(人工)
图片

mask:(脚本生成)
图片
上次由 KazamaSion 在 2016-10-11 11:46,总共编辑 1 次。


头像
KazamaSion
帖子: 29
注册时间: 2016-08-22 6:36

Re: 如何正确地获取图像的透明通道?

2016-10-11 11:46

mawen1250 写了:alpha = core.resize.Spline36(alpha, format = vs.GRAY16)

在这一步你是不是把RGB24转成了GRAY16?可能GRAY16默认是limited range(8bit下Y在16-235),所以白色变成了235。
如果alpha是RGB24的灰度图,要获取GRAY,直接提取其中一个平面即可。
感谢,确实是这样的。问题已解决。

回到 “VapourSynth”