MATLAB GUI ,2,使用MATLAB的函数来实现MATLAB GUI,part 5,imshow绘图方式以及主辅图像缓存
2014-02-02 14:28
1056 查看
一 imshow函数
如果读入了一个图像,那么使用imshow函数即可以完成图像的显示。那么这里多介绍三个函数imread、imresize和imwrite,使用方式如下,
image_matrix = imread(‘test.jpg’,'jpg'); % 读入图像, 第一个参数为图像名,第二个参数为图像格式
% 返回值为图像矩阵,在MATLAB中图像读入后表示为矩阵
image_matrix_resized = imresize(image_matrix, [ x, y ]); % 修改图像尺寸, 第一个参数为图像矩阵,第二个参数为2维向量,为图像尺寸参数
% 返回值为修改后图像矩阵
imshow(image_matrix_resized); % 显示图像
imwrite(image_matrix_resized, 'pic.bmp', 'bmp'); % 写出图像,第一个参数为图像矩阵,第二个参数为图像名,第三个参数为图像存储格式
二 主辅缓存
可以使用一个图像矩阵作为主缓存,在显示过程中,用imshow完成显示。
而另外的辅缓存在更新过程中使用,将所有的图像更新数据存储在辅缓存中,更新完成后将辅缓存内的数据拷贝到主缓存中,再显示即可。
三 演示
这个演示很简单,就是一个矩形的移动和大小变换。(- -,旋转算法比较麻烦,就以简单的为主了)
function part5(in)
global h;
if nargin
eval(in);
else
if isempty(h)
initialize
else
closefcn;
end
end
function render
global h;
% 更新矩形位置和大小
h.square.pos = fix(...
[h.square.center(1) + 150 * cos(h.square.angle), ...
h.square.center(2) + 150 * sin(h.square.angle)]);
h.square.size = fix(70+40*cos(h.square.angle));
h.square.angle = mod(h.square.angle+0.05,2*pi);
% 刷新缓存
h.pool = NaN*ones(600,600,3);
h.pool(...
h.square.pos(1)-h.square.size:h.square.pos(1)+h.square.size, ...
h.square.pos(2)-h.square.size:h.square.pos(2)+h.square.size, 1) ...
= 1;
h.pool(...
h.square.pos(1)-h.square.size:h.square.pos(1)+h.square.size, ...
h.square.pos(2)-h.square.size:h.square.pos(2)+h.square.size, 2) ...
= 1;
h.pool(...
h.square.pos(1)-h.square.size:h.square.pos(1)+h.square.size, ...
h.square.pos(2)-h.square.size:h.square.pos(2)+h.square.size, 3) ...
= 1;
% 正常情况下上述操作在辅缓存上进行,然后拷贝到主缓存,进入下面的显示阶段
imshow(h.pool)
function initialize
global h;
% 创建矩形
h.square.size = 10;
h.square.pos = [0,0];
h.square.angle = 0;
h.square.center = [300,300];
% 创建图像窗口
h.figure = figure(... !!!创建图像界面
'numbertitle','off', ... 关闭数字标题
'name','第五部分 IMSHOW实例',... 窗口标题
'units','pixels',... 窗口位置等信息的单位,设置为像素
'position',[0,0,600,600],... 窗口位置,仅需要设置窗口大小,后面用MOVEGUI函数完成居中的移动
'resize','off',...
'menu','none', ...
'deletefcn','part5(''closefcn'')');
movegui(h.figure,'center')
% 创建坐标系
h.axes = axes(... !!!创建坐标轴,作为游戏显示空间
'units','normalized',... 单位设置为归一化
'position',[0,0,1,1],... 利用归一化设置坐标轴铺满整个窗口
'color',[0,0,0],... 坐标轴背景色
'tickdir','out'); % 坐标轴小刻度朝向为外,也可以通过将其长度设置为极小值解决他占用界面的问题
% 创建主缓存
h.pool = NaN*ones(600,600,3); % 这里的演示程序仅建立了一个计时器,而且没有交互,加之MATLAB效率限制,这里未定义辅缓存
% 创建计时器
h.timer = timer(...
'busymode','drop', ...
'ExecutionMode','fixedrate', ...
'period',0.06, ... 采用这种方式来实现,MATLAB似乎效率很低,只有将帧率降低到这里才能勉强显示
'timerfcn','part5(''render'')');
start(h.timer)
function closefcn
global h;
if isfield(h,'figure') && ishandle(h.figure)
delete(h.figure);
end
if isfield(h,'timer') && isvalid(h.timer)
stop(h.timer);
delete(h.timer);
end
h =[];
四 小结
到了这里,这一系列的内容就结束了。本节主要就是介绍一下采用缓存这种想法来实现前面的思路。当然在MATLAB中,这种做法非常不值得推荐,MATLAB完全跟不上趟,不过如果你使用其他工具和语言,那么结果就不一样了。
希望这个系列能够帮助想学习MATALB GUI的你,或者是想做游戏的你,让我们一起奋斗吧
如果读入了一个图像,那么使用imshow函数即可以完成图像的显示。那么这里多介绍三个函数imread、imresize和imwrite,使用方式如下,
image_matrix = imread(‘test.jpg’,'jpg'); % 读入图像, 第一个参数为图像名,第二个参数为图像格式
% 返回值为图像矩阵,在MATLAB中图像读入后表示为矩阵
image_matrix_resized = imresize(image_matrix, [ x, y ]); % 修改图像尺寸, 第一个参数为图像矩阵,第二个参数为2维向量,为图像尺寸参数
% 返回值为修改后图像矩阵
imshow(image_matrix_resized); % 显示图像
imwrite(image_matrix_resized, 'pic.bmp', 'bmp'); % 写出图像,第一个参数为图像矩阵,第二个参数为图像名,第三个参数为图像存储格式
二 主辅缓存
可以使用一个图像矩阵作为主缓存,在显示过程中,用imshow完成显示。
而另外的辅缓存在更新过程中使用,将所有的图像更新数据存储在辅缓存中,更新完成后将辅缓存内的数据拷贝到主缓存中,再显示即可。
三 演示
这个演示很简单,就是一个矩形的移动和大小变换。(- -,旋转算法比较麻烦,就以简单的为主了)
function part5(in)
global h;
if nargin
eval(in);
else
if isempty(h)
initialize
else
closefcn;
end
end
function render
global h;
% 更新矩形位置和大小
h.square.pos = fix(...
[h.square.center(1) + 150 * cos(h.square.angle), ...
h.square.center(2) + 150 * sin(h.square.angle)]);
h.square.size = fix(70+40*cos(h.square.angle));
h.square.angle = mod(h.square.angle+0.05,2*pi);
% 刷新缓存
h.pool = NaN*ones(600,600,3);
h.pool(...
h.square.pos(1)-h.square.size:h.square.pos(1)+h.square.size, ...
h.square.pos(2)-h.square.size:h.square.pos(2)+h.square.size, 1) ...
= 1;
h.pool(...
h.square.pos(1)-h.square.size:h.square.pos(1)+h.square.size, ...
h.square.pos(2)-h.square.size:h.square.pos(2)+h.square.size, 2) ...
= 1;
h.pool(...
h.square.pos(1)-h.square.size:h.square.pos(1)+h.square.size, ...
h.square.pos(2)-h.square.size:h.square.pos(2)+h.square.size, 3) ...
= 1;
% 正常情况下上述操作在辅缓存上进行,然后拷贝到主缓存,进入下面的显示阶段
imshow(h.pool)
function initialize
global h;
% 创建矩形
h.square.size = 10;
h.square.pos = [0,0];
h.square.angle = 0;
h.square.center = [300,300];
% 创建图像窗口
h.figure = figure(... !!!创建图像界面
'numbertitle','off', ... 关闭数字标题
'name','第五部分 IMSHOW实例',... 窗口标题
'units','pixels',... 窗口位置等信息的单位,设置为像素
'position',[0,0,600,600],... 窗口位置,仅需要设置窗口大小,后面用MOVEGUI函数完成居中的移动
'resize','off',...
'menu','none', ...
'deletefcn','part5(''closefcn'')');
movegui(h.figure,'center')
% 创建坐标系
h.axes = axes(... !!!创建坐标轴,作为游戏显示空间
'units','normalized',... 单位设置为归一化
'position',[0,0,1,1],... 利用归一化设置坐标轴铺满整个窗口
'color',[0,0,0],... 坐标轴背景色
'tickdir','out'); % 坐标轴小刻度朝向为外,也可以通过将其长度设置为极小值解决他占用界面的问题
% 创建主缓存
h.pool = NaN*ones(600,600,3); % 这里的演示程序仅建立了一个计时器,而且没有交互,加之MATLAB效率限制,这里未定义辅缓存
% 创建计时器
h.timer = timer(...
'busymode','drop', ...
'ExecutionMode','fixedrate', ...
'period',0.06, ... 采用这种方式来实现,MATLAB似乎效率很低,只有将帧率降低到这里才能勉强显示
'timerfcn','part5(''render'')');
start(h.timer)
function closefcn
global h;
if isfield(h,'figure') && ishandle(h.figure)
delete(h.figure);
end
if isfield(h,'timer') && isvalid(h.timer)
stop(h.timer);
delete(h.timer);
end
h =[];
四 小结
到了这里,这一系列的内容就结束了。本节主要就是介绍一下采用缓存这种想法来实现前面的思路。当然在MATLAB中,这种做法非常不值得推荐,MATLAB完全跟不上趟,不过如果你使用其他工具和语言,那么结果就不一样了。
希望这个系列能够帮助想学习MATALB GUI的你,或者是想做游戏的你,让我们一起奋斗吧
相关文章推荐
- MATLAB GUI ,2,使用MATLAB的函数来实现MATLAB GUI,part 1,图像、按钮和坐标轴
- MATLAB GUI ,2,使用MATLAB的函数来实现MATLAB GUI,part 4,小游戏
- MATLAB GUI ,2,使用MATLAB的函数来实现MATLAB GUI,part 3,全局变量,计时器和状态机
- 使用axes函数在matlab绘图中实现图中图的绘制
- 给图像加高斯噪声和椒盐噪声(不使用自带函数)matlab实现
- Matlab中imshow()函数的使用
- matlab 图像函数以及运用(第十章)
- 使用 matlab 数字图像处理(三)—— 实现图像的旋转(不使用 imrotate)
- Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- 使用双线性插值法放大图像(matlab实现)
- MATLAB基本的使用方法归纳(图像,矩阵及函数)
- 一个不错的PHP缓存类介绍和PHP缓存函数介绍以及使用
- Java多线程学习笔记1——线程的实现方式以及定时器的使用
- 哈工大深研院数字图像处理第一次大作业:不调用Matlab函数实现图像增强
- 以用户登录、注册、添加删除修改为例,解析jdbcTemplate使用方式以及spring注解实现CRUD
- Spring定时任务的实现方式--ScheduledExecutorService and ScheduledExecutorFactoryBean的简单源码解析以及使用
- 图像处理学习笔记之MATLAB中imhist、imadjust、stretchlim函数实现
- Windows下Matlab使用G++ DLL实现图像处理
- RTTI、虚函数和虚基类的实现方式、开销分析及使用指导(虚函数的开销很小,就2次操作而已)