绿幕特效视频的透明通道输出与拼合为图像矩阵
既然之前的特效实现提升到了质的飞跃,那么就考虑敌机(本机)爆炸时的效果问题了。
首先download下某个绿幕爆炸特效视频:

本次使用aftereffects进行抠像:
首先视频导入到ae中,在效果->抠像->中选择一个效果,比如keylight,并在参数中选择屏幕颜色(screen color)取色为背景色:

之后对视频裁剪、调整大小后,点击合成->添加到渲染队列 :
点击蓝色 “无损”,弹出输出设置

并调整参数如下:

png序列、RGB+Alpha(裁剪,调整大小等也可以在这微)
点击确定后点击渲染即可。
输出效果如下:

接下来对图像进行裁剪、缩小和拼合。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
原单图像大小为720*1280, 根据图像的内容,把图像矩阵前600行,341列到940列的内容保存即可,裁剪后图像的大小为600*600,然后缩放(imresize)到100*100后拼合,matlab代码如下:
file_path='D:\MyG\images\explode\';%序列位置
img_path_list = dir(strcat(file_path,'爆炸*.png'));%根据公共前缀名获得列表
img_num = length(img_path_list);%序列长度/图片个数
rm=100;%缩小后的高
rn=100;
result=zeros(rm*12,rn*12,3);%存储单个帧拼合后的图像
splice_alpha=zeros(rm*12,rn*12);%存储单个透明通道拼合后的总通道(对应result)
for i=1:img_numimg_name=img_path_list(i).name;%取列表的每个元素名[img,mapa,alpha]=imread(strcat(file_path,img_name));%读取图像 获得矩阵img map 和alphaimg_tailor=img(1:600,341:940,:);alpha_tailor=alpha(1:600,341:940);%imshow(img_tailor);img_scan=imresize(img_tailor,[rm,rn]);alpha_scan=imresize(alpha_tailor,[rm,rn]);rw=mod(i-1,12)+1;%根据i计算该图像处于第几列re=floor((i-1)/12)+1;%根据i计算该图像处于第几行result((re-1)*rm+1:re*rm,(rw-1)*rn+1:rw*rn,1:3)=img_scan;%每个位置放入图像splice_alpha((re-1)*rm+1:re*rm,(rw-1)*rn+1:rw*rn)=alpha_scan;%f=imshow(img); %set(f,'AlphaData',alpha_tailor); %直接imshow不能显示透明效果,要再加入该句才可以
end
imwrite(uint8(result),'explode.png','Alpha',uint8(splice_alpha))%保存
拼合后效果图如下:

使用之前文章(https://mp.csdn.net/postedit/91409885)里运行后效果:

爆炸出现的位置等调整可在Animation中加入函数每次敌机死亡后传入位置并更新,在最开始游戏初始化时load就可以。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
