级别: 新手上路
- 注册时间:
- 2005-02-19
- 在线时间:
- 0小时
- 发帖:
- 31
|
软件下载:AviSynthhttp://sourceforge.net/project/showfiles.php?group_id=57023VirtualDubModhttp://sourceforge.net/project/showfiles.php?group_id=65889GIF Movie Gearhttp://www.moviegear.com/gmgdown.htmGSpothttp://dl.163.com/downloadthis.php?id=18461&temp=/GSpot25b8.rarAdobe Photoshop与 ACDsee等制图工具一.静态logo可以通过AviSynth或VirtualDubMod加载静态logo;先讨论AviSynth方法:
处理背景色: 1.用colorkeymask滤镜; 2.用mask滤镜;
1.colorkeymask滤镜: (1)logo的选取 选择一定分辩率的图片,在图像编辑器里编辑好尺寸,尽量不要在脚本里用resize滤镜.
(2)编写脚本 <1>若图片背景为纯白色,比如脚本:
引用 v1=AviSource("G:\Sample\AVI\s01.avi").converttorgb32 v2=ImageReader("G:\Sample\pics\p01.jpg").converttorgb24.flipvertical() v3=v2.converttorgb32.colorkeymask($FFFFFF,20) Layer(v1,v3,"add",255,0,0)
解说: v1=AviSource("G:\Sample\AVI\s01.avi").converttorgb32 #以AviSource方式读取影片来源;改变成converttorgb32的颜色环境
v2=ImageReader("G:\Sample\pics\p01.jpg").converttorgb24.flipvertical() #以ImageReader方式读取logo来源;改变成converttorgb24的颜色环境,也可以写为converttorgb32;flipvertical()为翻转滤镜
v3=v2.converttorgb32.colorkeymask($FFFFFF,20) #将colorkeymask滤镜应用到logo
Layer(v1,v3,"add",255,0,0) #合并v1(影片),v3(logo);Layer函数中覆盖强度为255,图片主体不透明;图片坐标值为0,0,在左上角
colorkeymask滤镜的说明: colorkeymask(int color,int tolerance) int color:色彩深度---16进制: $xxxxxx,x取值为0-f; 10进制:0-255 int tolerance:取值0-255,在int color固定时,随int tolerance值的增大,图片趋向透明.
colorkeymask($FFFFFF,40)中先固定int color为$FFFFFF,调节int tolerance使图像达到最佳效果,int tolerance值过小,背景色不能完全去掉;int tolerance值过大,导致主体颜色损失,此处为20.这里$FFFFFF若改为10进制数起不到去掉背景色的作用.
可见logo有一定的损失.
<2>若图片背景为其它纯色,比如
方法a.确定背景色的RGB数值,将int color用RGB的十六进制形式表示.(RGB三原色在WINDOWS有相应的值以16进制编译,定义了256种色彩深度即0-FF,但在SSA中是以BGR形式表示出来的.若R:46,G:139,B:87,则RGB:2E8B57,BGR:578B2E) 方法b.将背景色改为纯白色,修改办法在第2部分的mask滤镜方法中,修改后再按<1>加载.
下面讨论方法a
获得背景颜色代码的方法: 打开WINDOWS"附件"中的"画图",点击工具栏里的"取色",选择背景色;打开"颜色"菜单,编辑颜色,规定自定义颜色,得到R:152,G:115,B:211,即RGB: 9873D3,用BGR表示为BGR: D37398.
或打开Adobe Photoshop,点击工具栏里的"吸管工具",也可以得到RGB的十进制数值.
转换为16进制的方法: 直接计算或打开Sub Station Alpha v4.08在Style Override中的"colour"规定自定义颜色,即可显示BGR数值,再转换为RGB形式即可.
脚本:
引用 v1=AviSource("G:\Sample\AVI\s01.avi").converttorgb32 v2=ImageReader("G:\Sample\pics\p03.jpg").converttorgb24.flipvertical() v3=v2.converttorgb32.colorkeymask($9873D3,40) Layer(v1,v3,"add",255,0,0)
注:colorkeymask($9873D3,40)中先固定int color为$9873D3,调节int tolerance到40去掉背景色;在去掉背景色后,int tolerance的值要尽量的小.
主体颜色有少量损失.
将以上脚本中的colorkeymask($9873D3,40)改为colorkeymask(255,165),其它不变
主体颜色损失严重.
若将colorkeymask($9873D3,40)改为colorkeymask(60,165),其它不变
主体颜色损失严重.
若将colorkeymask($9873D3,40)改为colorkeymask(0,220),其它不变
主体颜色损失十分严重.
总结: 若int color采用16进制的某个颜色(一般选用背景色的RGB值),当int tolerance值的增大到一特定值时,该颜色消失.(当采用16进制不能去掉背景色时,可尝试采用10进制) 若int color采用10进制的某个颜色(一般先固定int color为255),变动int tolerance的值,选择去掉背景色的最佳数值,再固定int tolerance的值,回过头来调节int color的数值,使图像效果达到最佳. 无论采用16进制还是10进制,随int tolerance值增大,主体颜色都会减弱.
<3>若图片背景为杂色,比如
方法a.将背景色改为纯白色,修改办法在第2部分的mask滤镜方法中,修改后再按<1>加载. 方法b.用mask函数实现透明.
|