利用MATLAB进行动画制作
以植物大战僵尸图片为例,首先找到背景图片、植物、僵尸;如下图(图片来源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进行动画制作相关推荐
- MATLAB 3D 动画制作(一)- 3D 图形设计
MATLAB 3D 动画制作(一)- 3D 图形设计 MATLAB 3D Animation -- 3D object design Auther: Sonictl Northeastern Un ...
- 利用Matlab与Arduino制作车牌识别的完整控制系统(1)
一.效果展示 ①GUI界面: ②图像处理过程展示 ( 注:系统可利用matlab界面识别显示和图像处理,并将数据发给Arduinio用于显示显示屏的内容+蜂鸣器+舵机打造全套的门禁系统) 二.系统流程 ...
- 【MATLAB】动画制作
目录 1.简单动画制作 2.模拟六个物体移动 3.其它例子 1.简单动画制作 动画制作通常有两种方法:一种是预先将图形制作好,并放到图形缓冲区内,然后一帧一帧地播放.另一种方法是保持整个背景图案不变, ...
- matlab 图片制作动画制作,MATLAB作图之制作动画:单摆运动仿真
MA TLAB作图之制作动画:单摆运动仿真%制作动画 %挂摆横梁 plot([-0.2;0.2],[0;0],'color','y','linestyle','-',... 'linewidth',1 ...
- 利用matlab M_Map工具制作GPS测站分布图
一.安装M_Map 首先去官网(https://www.eoas.ubc.ca/~rich/map.html)下载M_Map文件,进入M_Map下载页面,如下图: 2. 点击gzipped tar-f ...
- Matlab电影动画的初级制作
Matlab电影动画的初级制作 --与例程讲解 By 阿嚏artist **Matlab的动画制作主要分为三类:** ①质点动画:最简单的动画产生方式,产生一个顺着曲线轨迹运动的质点来操作. ②电影动 ...
- matlab制作动画并保存,[转载]Matlab中动画的实现、制作和保存(转载Matlab技术论坛)...
Matlab中动画的实现.制作和保存(转载Matlab技术论坛) 本帖由Matlab技术论坛原创,原帖参见 http://www.matlabsky.com/thread-592-1-1.html 光 ...
- 利用MATLAB实现图片切换动画效果详解
内容摘要:本博文介绍MATLAB图片切换动画效果的制作以及GIF文件保存,并结合具体代码详细解释.介绍了利用MATLAB编程进行几幅图片的轮流切换,切换时实现与幻灯片切换相似的炫酷的图片切换特效.其中 ...
- matlab程序动画设计,Matlab动画制作(一)——电影动画
电影动画的好处就是,运行一次可以多次播放,甚至可以直接生成avi文件,直接独立与Matlab环境播放.这是其它三种动画制作方法所不具备的. MATLAB中,创建电影动画的过程分为以下四步: step1 ...
最新文章
- 前后端分离后的前端时代
- Linux文件的复制、删除和移动命令
- Ubuntu文件中文乱码
- python 两个乘号是什么_(2)Python 变量和运算符
- HQL语句使用row_number() over(partition by),分组排序取topN
- AD9516/AD9517时钟芯片寄存器参数配置说明
- 【英语学习】【Level 07】U04 Rest and Relaxation L1 Waiting to board a train
- efcore调用函数_EF Core 3.1 执行sql语句的几种方法
- 浅谈Flutter UI布局
- Java 数字转换为汉语中人民币的大写
- oracle单行子查询返回多个行 order by,单行子查询返回多个行
- Linux下各种压缩文件的解压方法
- html盒子怎么定义,CSS盒状模型的定义
- 破壳而出的琉璃之鸟汉化 QA
- STM32 Cube mx的MDK项目编译报错与debug
- NLPCC论文LaTeX封面生成代码
- openFeign夺命连环9问,这谁受得了?
- Visual Studio 中使用万能头文件 #include bits/stdc++.h
- 8.排序——数据结构(严蔚敏C语言版)
- 安卓编程 app图标自定义