以植物大战僵尸图片为例,首先找到背景图片、植物、僵尸;如下图(图片来源http://www.aigei.com/s,也就是爱给网)。

MATLAB程序如下:

%% 清屏
clear;close all;clc;
%% 进入路径
cd D:\MATLAB\MATLAB\植物大战僵尸
%% 第一存储背景
%% 选择需要处理的图形文件
[filename,pathname,FilterIndex]=uigetfile(...{'*.*', '所有文件(*.*)-可自定义';...'*.bmp','all image file (*.bmp)-可自定义';...'*.jpg','all image file (*.jpg)-可自定义'},...'请选择要处理的图片-可自定义',...'MultiSelect', 'on');
% imread读取对应选择的文件,并保存到input_image,利用imshow显示原始图像
input_image=imread([pathname filename]); %RGB类型是uint8
input_image=im2double(input_image);%转换成统一的double精度,方便计算
figure;imshow(input_image);title('原始图像');%显示原始图像
%% 第二存储坚果
[filename,pathname,FilterIndex]=uigetfile(...{'*.*', '所有文件(*.*)-可自定义';...'*.bmp','all image file (*.bmp)-可自定义';...'*.jpg','all image file (*.jpg)-可自定义'},...'请选择要处理的图片-可自定义',...'MultiSelect', 'on');
[A,map]=imread([pathname filename]); %RGB类型是uint8
size(A,4);%查看一共有几张(2张图构成)
Nut_all={''};%nut胞元初始化
for i_nut=1:size(A,4)
[nut,map]=imread([pathname filename],'Frames',i_nut);
nut=ind2rgb(nut,map);
nut=nut(6:end,:,:);
imshow(nut)
%二值化
BW_RGB=im2bw(nut,0.02);
figure;imshow(BW_RGB);title('二值化-RGB');%显示RGB二值化结果
%填充
BW_RGB=imfill(BW_RGB,'holes');
figure;imshow(BW_RGB);title('空洞填充');%显示抠图结果
nut=imresize(nut,0.5);%完成图片缩放
BW_RGB=imresize(BW_RGB,0.5);%完成图片缩放
Nut_all{i_nut,1}=nut;%原图
Nut_all{i_nut,2}=BW_RGB;%二值化抠图用
end
close all
%% 展示
% for i=1:12
%     imshow(Nut_all{i,1})
%     pause(0.1)
% end
%% 第三存储zombie
[filename,pathname,FilterIndex]=uigetfile(...{'*.*', '所有文件(*.*)-可自定义';...'*.bmp','all image file (*.bmp)-可自定义';...'*.jpg','all image file (*.jpg)-可自定义'},...'请选择要处理的图片-可自定义',...'MultiSelect', 'on');
[A,map]=imread([pathname filename]); %RGB类型是uint8
size(A,4);%查看一共有几张(2张图构成)
Zombie_all={''};%Zombie胞元初始化
for i_zombie=1:size(A,4)
[zombie,map]=imread([pathname filename],'Frames',i_zombie);
zombie=ind2rgb(zombie,map);
imshow(zombie)
%二值化
BW_RGB=im2bw(zombie,0.02);
figure;imshow(BW_RGB);title('二值化-RGB');%显示RGB二值化结果
%填充
BW_RGB=imfill(BW_RGB,'holes');
figure;imshow(BW_RGB);title('空洞填充');%显示抠图结果
zombie=imresize(zombie,0.5);%完成图片缩放
BW_RGB=imresize(BW_RGB,0.5);%完成图片缩放
Zombie_all{i_zombie,1}=zombie;%原图
Zombie_all{i_zombie,2}=BW_RGB;%二值化抠图用
end
close all
%% 展示
% for i=1:23
%     imshow(Zombie_all{i,1},'InitialMagnification','fit')
%     pause(0.1)
% end
%
% for i=1:23
%     imshow(Zombie_all{i,2},'InitialMagnification','fit')
%     pause(0.1)
% end%% 看尺寸后缩小0.5倍%% 看位置
% imshow(input_image,'InitialMagnification','fit')
% h=imrect;%鼠标变成十字,用来选取感兴趣区域
% pos=getPosition(h);%获取图像上特定区域的坐标
%% 动画制作
% 坚果参数
ORG_im=input_image;
H_nut=70;L_nut=10;
m=size(Nut_all{1,1},1);n=size(Nut_all{2,1},2);
im_NB=ORG_im(H_nut:H_nut+m-1,L_nut:L_nut+n-1,:);
% zombie参数
H_zombie=49;L_zombie=115;%   125.0000   49.0000   69.0000   77.0000
m_z=size(Zombie_all{1,1},1);n_z=size(Zombie_all{2,1},2);
i_c=0;%计步器
move_zb=4;%移动速度
%逐帧动画生成
ct=0;%计数器
% imshow(im_NB)%需要替换的背景
while ct<75ct=ct+1;if mod(ct,12)==0 %对应帧数i_nut=12;%0对应12帧elsei_nut=mod(ct,12);%余数对应1到11帧end
[a,b]=find(Nut_all{i_nut,2}==1);
nut_i=Nut_all{i_nut,1};
%搬运二值化数值1标记像素块填补到背景P_image图片中,背景颜色由上面定义
for i=1:size(a,1)im_NB(a(i),b(i),1)=nut_i(a(i),b(i),1);%第一通道赋值im_NB(a(i),b(i),2)=nut_i(a(i),b(i),2);%第二通道赋值im_NB(a(i),b(i),3)=nut_i(a(i),b(i),3);%第三通道赋值
end
% imshow(im_NB(:,1:end-1,:))
ORG_im(H_nut:H_nut+m-1,L_nut:L_nut+n-2,:)=im_NB(:,1:end-1,:);
% imshow(ORG_im)%图框显示不好看%zombie加入
if mod(ct,23)==0 %对应帧数i_zombie=23;%0对应12帧elsei_zombie=mod(ct,23);%余数对应1到22帧
endif mod(ct,10)==0%移动频率i_c=i_c+1;
end
im_ZB=ORG_im(H_zombie:H_zombie+m_z-1,L_zombie-move_zb*i_c:L_zombie+n_z-1-move_zb*i_c,:);
%imshow(im_ZB);
[a,b]=find(Zombie_all{i_zombie,2}==1);
zombie_i=Zombie_all{i_zombie,1};
%搬运二值化数值1标记像素块填补到背景P_image图片中,背景颜色由上面定义
for i=1:size(a,1)im_ZB(a(i),b(i),1)=zombie_i(a(i),b(i),1);%第一通道赋值im_ZB(a(i),b(i),2)=zombie_i(a(i),b(i),2);%第二通道赋值im_ZB(a(i),b(i),3)=zombie_i(a(i),b(i),3);%第三通道赋值
end
% imshow(im_ZB)%融入小背景zombie
ORG_im(H_zombie:H_zombie+m_z-1,L_zombie-move_zb*i_c:L_zombie+n_z-1-move_zb*i_c,:)=im_ZB;
% imshow(ORG_im)
imshow(ORG_im,'InitialMagnification','fit')if ct==1
[I,map]=rgb2ind(ORG_im,40);
imwrite(I,map,'nut_zb.gif','gif','Loopcount',inf,'DelayTime',0.2);%第一次必须创建
else
[I,map]=rgb2ind(ORG_im,40);
imwrite(I,map,'nut_zb.gif','gif','WriteMode','append','DelayTime',0.2);
endpause(0.05)
ORG_im=input_image;%刷新背景
end

利用MATLAB进行动画制作相关推荐

  1. MATLAB 3D 动画制作(一)- 3D 图形设计

    MATLAB 3D 动画制作(一)- 3D 图形设计  MATLAB 3D Animation -- 3D object design  Auther: Sonictl Northeastern Un ...

  2. 利用Matlab与Arduino制作车牌识别的完整控制系统(1)

    一.效果展示 ①GUI界面: ②图像处理过程展示 ( 注:系统可利用matlab界面识别显示和图像处理,并将数据发给Arduinio用于显示显示屏的内容+蜂鸣器+舵机打造全套的门禁系统) 二.系统流程 ...

  3. 【MATLAB】动画制作

    目录 1.简单动画制作 2.模拟六个物体移动 3.其它例子 1.简单动画制作 动画制作通常有两种方法:一种是预先将图形制作好,并放到图形缓冲区内,然后一帧一帧地播放.另一种方法是保持整个背景图案不变, ...

  4. matlab 图片制作动画制作,MATLAB作图之制作动画:单摆运动仿真

    MA TLAB作图之制作动画:单摆运动仿真%制作动画 %挂摆横梁 plot([-0.2;0.2],[0;0],'color','y','linestyle','-',... 'linewidth',1 ...

  5. 利用matlab M_Map工具制作GPS测站分布图

    一.安装M_Map 首先去官网(https://www.eoas.ubc.ca/~rich/map.html)下载M_Map文件,进入M_Map下载页面,如下图: 2. 点击gzipped tar-f ...

  6. Matlab电影动画的初级制作

    Matlab电影动画的初级制作 --与例程讲解 By 阿嚏artist **Matlab的动画制作主要分为三类:** ①质点动画:最简单的动画产生方式,产生一个顺着曲线轨迹运动的质点来操作. ②电影动 ...

  7. matlab制作动画并保存,[转载]Matlab中动画的实现、制作和保存(转载Matlab技术论坛)...

    Matlab中动画的实现.制作和保存(转载Matlab技术论坛) 本帖由Matlab技术论坛原创,原帖参见 http://www.matlabsky.com/thread-592-1-1.html 光 ...

  8. 利用MATLAB实现图片切换动画效果详解

    内容摘要:本博文介绍MATLAB图片切换动画效果的制作以及GIF文件保存,并结合具体代码详细解释.介绍了利用MATLAB编程进行几幅图片的轮流切换,切换时实现与幻灯片切换相似的炫酷的图片切换特效.其中 ...

  9. matlab程序动画设计,Matlab动画制作(一)——电影动画

    电影动画的好处就是,运行一次可以多次播放,甚至可以直接生成avi文件,直接独立与Matlab环境播放.这是其它三种动画制作方法所不具备的. MATLAB中,创建电影动画的过程分为以下四步: step1 ...

最新文章

  1. 前后端分离后的前端时代
  2. Linux文件的复制、删除和移动命令
  3. Ubuntu文件中文乱码
  4. python 两个乘号是什么_(2)Python 变量和运算符
  5. HQL语句使用row_number() over(partition by),分组排序取topN
  6. AD9516/AD9517时钟芯片寄存器参数配置说明
  7. 【英语学习】【Level 07】U04 Rest and Relaxation L1 Waiting to board a train
  8. efcore调用函数_EF Core 3.1 执行sql语句的几种方法
  9. 浅谈Flutter UI布局
  10. Java 数字转换为汉语中人民币的大写
  11. oracle单行子查询返回多个行 order by,单行子查询返回多个行
  12. Linux下各种压缩文件的解压方法
  13. html盒子怎么定义,CSS盒状模型的定义
  14. 破壳而出的琉璃之鸟汉化 QA
  15. STM32 Cube mx的MDK项目编译报错与debug
  16. NLPCC论文LaTeX封面生成代码
  17. openFeign夺命连环9问,这谁受得了?
  18. Visual Studio 中使用万能头文件 #include bits/stdc++.h
  19. 8.排序——数据结构(严蔚敏C语言版)
  20. 安卓编程 app图标自定义

热门文章

  1. 「游戏」寻路算法之A Star算法原理及实现
  2. 有源电力滤波器APF三电平SVPWM的Matlab仿真,三电平SVPWM,LCL滤波,双环控制
  3. 科普 | ETH2 Staking 指南 :客户端多样性为何如此重要
  4. MOS管之开关控制与信号控制
  5. jQuery打飞机游戏代码下载
  6. usdt智能合约代码
  7. php下载远程文件(图片)的三种方法
  8. SAP采购订单审批时可以拒绝吗?
  9. 电子墨水屏的WIFI用法
  10. 校园智能门锁解决方案,助力高校智慧后勤信息化管理