分页: 1 / 1

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

发表于 : 2016-09-05 9:37
KazamaSion
先贴测试代码:(视频加载过程省略),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:(脚本生成)
图片

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

发表于 : 2016-09-26 3:33
mawen1250
alpha = core.resize.Spline36(alpha, format = vs.GRAY16)

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

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

发表于 : 2016-10-11 11:46
KazamaSion
mawen1250 写了:alpha = core.resize.Spline36(alpha, format = vs.GRAY16)

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