精华内容
下载资源
问答
  • Legend best fitlegend_best_fit automatically positions the existing legend inside the axes to avoid covering the plotted data. I think it does a better job than the "Location", "Best" option in "legen...

    Legend best fit

    legend_best_fit automatically positions the existing legend inside the axes to avoid covering the plotted data. I think it does a better job than the "Location", "Best" option in "legend" command.

    Example:

    legend_best_fit(axes_handle)

    Will position legend inside if it can, return false if it can not.

    legend_best_fit(axes_handle, 'adjust y limits', true)

    Positions legend if it can with existing y axis limits. If not, slightly expands y axis limits & tries again.

    legend_best_fit(axes_handle, 'location', preferred_location)

    Tries your preferred location (like "NorthEast", etc.) first.

    展开全文
  • matlab图片叠加的代码gentoo覆盖 Gentoo可移植树中显示的软件包: [] [] Gentoo可移植树中未提供的二进制捆绑软件包: [] [] [] dev-util /代码块: Code :: Blocks是开源,跨平台,免费的C,C ++和Fortran IDE。 ...
  • matlab图片操作

    2019-04-02 12:54:37
    读取、显示图片 I=imread("a.png",RGB) %第... %默认使用当前句柄,避免图片覆盖 imshow(I); 获取图片大小 length=size(I,1); width=size(I,2); [l,w]=size(I) RGB转为灰度图片 grayI = rgb2gray(I) 对图像进...
    • 读取、显示图片
    I=imread("a.png",RGB) %第一个参数为图片地址,第二个图片格式,不写matlab能自动判断
    ,
    figure; %默认使用当前句柄,避免图片覆盖
    imshow(I);
    • 获取图片大小
    length=size(I,1);
    width=size(I,2);
    
    [l,w]=size(I)
    •  RGB转为灰度图片
    grayI = rgb2gray(I)
    • 对图像进行二值化(即转为黑白两色)
    bw = im2bw(grayI);

     简例:

    I=imread("E:\matlab\image.png");
    
    figure;
    subplot(1, 3, 1);
    imshow(I);
    length=size(I,1)
    width=size(I,2)
    
    grayI=rgb2gray(I);
    subplot(1, 3, 2);
    imshow(grayI);
    
    bwI=im2bw(grayI);
    subplot(1, 3, 3);
    imshow(bwI);

    output:

     

    展开全文
  • matlab图片叠加的代码 SourceMesh功能 可以在下面找到更好的用法概述和示例: 一些测试代码开始: MyFunctionalNiftiVolume = 'nifti.nii'; afigure; D = atemplate('mesh','def2','inflate','overlay',{'curvature'...
  • 利用MATLAB实现图片切换动画效果详解

    万次阅读 多人点赞 2018-03-15 16:59:51
    内容摘要:本博文介绍MATLAB图片切换动画效果的制作以及GIF文件保存,并结合具体代码详细解释。介绍了利用MATLAB编程进行几幅图片的轮流切换,切换时实现与幻灯片切换相似的炫酷的图片切换特效。其中涉及一些MATLAB...

    内容摘要:本博文介绍MATLAB图片切换动画效果的制作以及GIF文件保存,并结合具体代码详细解释。介绍了利用MATLAB编程进行几幅图片的轮流切换,切换时实现与幻灯片切换相似的炫酷的图片切换特效。其中涉及一些MATLAB的高级图形设计,具体的函数及命令文中会详细介绍。本文先逐步介绍实现思路及代码细节,最后附上完整代码。

    1. 前言

           MATLAB中为数据可视化提供了全面系统的功能函数,据此可以绘制出许多形象生动的精美图像。同时MATLAB的句柄图形为用户提供了强有力的工具,可以很方便地对图形的每个可能方面进行控制,这在需要设计GUI的场合用处很大。刚接触时看到许多用MATLAB制作出炫丽的仿真动画不明觉厉,在大学的MATLAB编程课里也经常有编写一个图片切换动画的作业或课设。这里写一个有几幅图片轮流切换不同效果的程序,为此提供一个参考思路,希望对大家有所启发。

    2. MATLAB动画制作

           本节介绍MATLAB中动画制作的常用方式,对原理比较熟悉的读者可直接跳至第3节。众所周知动画其实是很多张图片的以一定时间间隔的逐帧切换,一个简单直接的想法当然就是下面代码中方式了。首先读取一张图片,通过for循环逐步扩大要显示图片的索引范围,达到逐步放大图片的效果。

    I=imread('image.jpg');%读图
    [x,y,z]=size(I);%尺寸
    while 1
    for i=1:100
       imshow(I(1:x/100*i,1:y/100*i,:));%逐渐放大显示
    end
    end

                                                                                                图2.1 显示效果图

           上述代码有点粗糙,运行过程中随着图片的放大窗口也在不断抖动。这其实跟imshow( )函数有关,每次调用它显示一张图片系统就会自动新创建一个窗口,窗口的大小是根据要显示图片的大小自动缩放的,上面的for循环中不断调用imshow( )而图片的大小是不断变大的,显示窗口自然也跟着变化。

           其实MATLAB为动画制作提供了三种实现方式:质点动画、电影动画、程序动画。质点动画是最简单的动画产生方式,产生一个顺着曲线轨迹运动的质点来操作;电影动画首先会保存一系列的图形数据,然后按照一定的顺序像电影一样的播放;程序动画是在图形窗口中按照一定的算法连续擦除和重绘图形对象。下面逐个简单演示一下

    2.1 质点动画

           质点动画由comet、comet3函数产生质点动画,分别对应二维和三维坐标下的质点。首先求解出质点完整的运动轨迹坐标x,y(三维时还有z),将x,y作为输入参数使用comet或comet3直接绘制动点。

     

    调用格式 调用说明
    comet(y) 显示质点绕着向量y的动画轨迹运动(二维)
    comet(x,y) 显示质点在横轴、纵轴方向的运动随向量x,y的动画轨迹(二维)
    comet(x,y,p)  效果与上一个相同,额外定义轨迹尾巴线的长度p*length(y),p介于0,1之间,默认为0.1

    comet3函数的使用方法与comet相似。

    实例代码如下:

    clf;  
    clear;  
    grid on;
    
    vx = 100*cos(1/4*pi);  
    vy = 100*sin(1/4*pi);  
    t = 0:0.02:15;  
    dx = vx*t;  
    dy = vy*t-9.8*t.^2/2;  
    comet(dx, dy);

    效果如图2.1.1所示

     

     

                                                                                               图2.1.1 质点动画效果图

    2.2 电影动画

           电影动画和电影的制作有点相似,实际可以看出是一个先“拍”再“播”的过程,即捕捉将要构成动画帧的图像逐个存到一个大矩阵中,然后播放这个大矩阵的数据。

    基本步骤:
      1、调用moviein函数初始化内存,创建一个足够大的矩阵,用于存储构成每一帧图像的数据。
      2、利用getframe抓取当前画面(即每帧图像),返回的数据用于构成动画矩阵。
      3、调用movie函数按照指定的速度进行指定次数播放该电影动画。例如:movie(M, n)可以播放由矩阵M所定义的画面n次,默认只播放一次。

    getframe与movie函数调用格式见表2.2.1及表2.2.2:getframe函数可以捕捉动画帧,并保存到矩阵中。

    表2.2.1 getframe函数用法
    调用格式 调用说明
    f=getframe 从当前图形框中得到动画帧
    f = getframe(h) 从图形句柄h中得到动画帧
    f=getframe(h,rect) 从图形句柄h的指定区域rect中得到动画帧

    当创建了一系列动画帧后,可利用movie函数播放这些动画帧。该函数的用法有:

    表2.2.2 movie函数用法
    调用格式 调用说明
    movie(M) 将矩阵M中的动画帧播放一次
    movie(M, n) 将矩阵M中的动画帧播放n次
    movie(M,n,fps) 将矩阵M中的动画帧以每秒fps帧的速度播放n次

    实例:旋转的山峰动画

    clc; clear;  
       
    % peaks是一个函数,其中有2个变量。由平移和放缩高斯分布函数获得。  
    % 参数为30,得到的X、Y、Z为30*30的矩阵。  
    [X, Y, Z] = peaks(30);  
    % surf绘制三维曲面图  
    surf(X,Y,Z);  
       
    axis([-3,3,-3,3,-10,10]);  
    % 关闭所用坐标轴上的标记、格栅和单位标记。但保留由text和gtext设置的对象  
    axis off;  
    shading interp;   
    colormap(hot);  
    
    M = moviein(20);% 建立一个20列的大矩阵    
    for i = 1:20    
       view(-37.5+24*(i-1),30);% 改变视点     
       M(i) = getframe;% 将图形保存到M矩阵   
    end  
    
    movie(M,2);% 播放画面2次

    运行结果如图2.2.1所示

     

     

                                                                                              图2.2.1 电影动画实例

    2.3 程序动画

           在MATLAB中把用于数据可视和界面制作的基本绘图要素称为句柄图形对象,每个图形对象有相应的属性值,例如线条Line对象就有颜色、位置等属性。可以改变图形对象的属性值,重绘图形对象,从而创建程序动画。其基本思路是:首先新建一个图形窗口,再循环内逐渐改变图形对象的相应属性值,并使用drawnow函数更新当前图形,整个循环就会表现出变化的动画效果。

    实例代码如下

    clear;
    clc;
    %% 新建图形窗口并设置初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
         [800 800 360 360],'name','图片切换动画效果');
     movegui(hFigure,'center');%设置居中
     %设置坐标轴属性
     hAxes=axes('Visible','off','units','normalized','position',[0 0 1 1]);
     
    %% 在图形窗口中显示图片 
     Im=imread('image.jpg');
     hIm=imshow(Im);
     [x,y,z]=size(Im);
    %% 修改属性并重绘
    for i=1:100
    I=Im(1:x/100*i,1:y/100*i,:);%逐渐放大显示
    set(hIm,'CData',I);
    drawnow;
    end

            代码5-8行新建图形窗口并为窗口中的对象设置初始属性,可以理解为给后面显示图像提供一个自定义的环境。首先第5行figure函数用于Figure图形窗口的创建,括号中参数设置相应属性,其中'menubar','none'表示禁用菜单栏;‘NumberTitle’,‘off’表示图形标题中不显示图形编号;‘Position’,'[800 800 360 360]'表示设置图形窗口的位置与大小,格式为[左 底 宽 高];‘Name’,'图片切换动画效果',表示设置图形窗口的标题。

           第7行设置图形窗口在居中位置。第9行axes函数用于Axes坐标对象的创建,即在当前图形窗口中新建一个坐标轴,括号里面参数设置上与figure格式相似,即设置坐标轴不可见、计量单位为常规、绘图区域的位置和大小设为[0 0 1 1]([左 底 宽 高])。

          第12-13行为读入图片,并在上面设置的坐标中显示图片,hIm为image(图形)对象的句柄,可通过句柄对该对象进行操作。

          第16-20行是在for循环中修改image(图形)对象的CData属性,并重绘图形从而实现动画的。具体的第18行中,set就是一个用于设置一般对象属性的函数,第一个参数hIm为图形句柄用于指定对哪个对象进行操作,这里就是image对象了;后面‘CData’,‘I’是指当前要显示的图像数据设置为矩阵I。整句就是指对hIm对象设置其要显示的图像这一属性为I。第19行drawnow就是将属性改变了的图形显示出来。

    实现的效果如图2.3.1所示

                                                                                      图2.3.1 程序动画效果

    3. 图片切换效果制作

           经过前面动画制作原理的介绍,这节就正式说说开头那个效果的实现了,为了便于编程实现(电影动画方式需先存后播编程稍显繁琐)这里采用程序动画的制作方式。首先需要准备几张长方形图片,为了方便后面处理其大小尺寸应该一致,即几张图像有相同长宽,并与接下来编写的M文件放在同一文件夹下。新建一个M文件命名为imageswitch.m,我们后面的编程都在该文件下进行。

    3.1 效果一实现

           如图3.1.1所示,将长方形图片做一个简单划分(这里我的图片尺寸为1920*1200),以宽度的大小为边长在中间掏出一个正方形,就是图中两条蓝色线条分割的中间部分,那么两条线的位置就是(1920-1200)/2和1920-(1920-1200)/2也就是360,和1560,如此一来这张图片就分成了左右两个长条和中间正方形区域了。

                                                                                              图3.1.1 分割图片

           现在一步步从头开始编写程序吧,首先实现的是第二幅图片的左边长条由顶部向下移动逐渐覆盖原图片的左边长条,同时右边的长条也逐渐被覆盖不过是由底部向上移动的。在程序中这一过程其实是一个图片矩阵中一部分元素逐渐被另一矩阵中元素所替换的过程。说白了图片的存储和处理都是以矩阵的形式,图3.1那张图片就是一个1920*1200*3的三维矩阵,左边长条的移动就是横坐标范围在1-360,纵坐标范围为1-1200的所有元素逐渐由第二张图数据矩阵的相同范围上的对应元素所赋值的过程了。我们看一段代码理解一下。

    function imageswitch1()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-09-27.jpg',...
        'BingWallpaper-2016-10-07.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/100;%渐变步长
    Length=(y-x)/2;
     % 动画效果一
        for i=step:step:x
            % 改变图像数据
            Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);
            Im(x-i+1:x,y-Length+1:y,:)=I2(1:i,y-Length+1:y,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
    end

           代码中第1-19行是新建图形窗口并对图形对象设置属性值为后面动画制作提供一个好的“环境”,在2.3节中已经详细介绍这里就不再赘述了。21-30行就是重点了,21行是设置一个赋值的范围跨度,值越大后面动画进行的速度就越快;22行的Length就是小长条的宽,为了方便后面用到;整个动画的实现在for循环中进行,第26行Im是将要显示的矩阵而后面的I2是下一张图片的数据矩阵,在第12行Im已经被赋值为第一张图片的数据矩阵I1了,现在要做的就是随着for循环的进行i的值逐渐增大长条逐渐被赋值了。22行语句如下

    Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);

          可以看到第二维和第三维的范围两边矩阵是相同的,都分别是1:Length、:,即第二维索引范围是1到Length(小长条的宽),第三维索引取全部范围(第三维可认为是对色彩的设定,“:”表示取索引全部范围,就可以认为是保留色彩了,实际还得理解下RGB图像的存储方式哦)。第一维范围为1到i,随i的增大越来越多的区域被I2中x-i+1到x范围的I2覆盖。同理第23行也是逐渐覆盖原有图像右边长条,所以这是第二维的范围应该是y-Length+1到y,而右边的长条下一张图片的那一部分是向下逐渐覆盖的,故第一维两个矩阵的索引范围与左边的相反。

           第24行将image对象的CData属性设置为赋值后的Im,即显示的图像是新的Im。第25行用drawnow函数重绘图形窗口,就会显示新的一帧。最终以上代码运行的动画效果如图3.1.2所示

                                                                                               图3.1.2 长条移动演示

           将中间正方形区域平均分成上下两部分,上部分区域由下一幅图片相应部分向右移动覆盖,下部分由下一幅图片相应部分向左移动覆盖,效果一的完整效果就是图3.1.3所示的

                                                                                          图3.1.3 效果一的完整效果

           这只要在上面实现长条的代码23-24间加上以下两行代码其原理与长条移动相同,只不过这时的索引范围需要有所改变上层范围为1到x/2,即上半部分,第二维Im是从Length+1(正方形开始的地方)至Length+i(随i的增大逐渐覆盖这个正方形宽度范围)被I2中最右边部分开始的像素部分取代,而第二行正好覆盖的方向相反。

    Im(1:x/2,Length+1:Length+i,:)=I2(1:x/2,y-Length-i+1:y-Length,:);
    Im(x/2+1:x,y-Length-i+1:y-Length,:)=I2(x/2+1:x,Length+1:Length+i,:);

           效果一的完整代码如下,新建到imageswitch2.m文件中即可实现图3.1.3的效果

    function imageswitch2()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-09-27.jpg',...
        'BingWallpaper-2016-10-07.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/10;%渐变步长
    Length=(y-x)/2;
     % 动画效果一
    
        for i=step:step:x
            % 改变图像数据
            Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);
            Im(x-i+1:x,y-Length+1:y,:)=I2(1:i,y-Length+1:y,:);
            Im(1:x/2,Length+1:Length+i,:)=I2(1:x/2,y-Length-i+1:y-Length,:);
            Im(x/2+1:x,y-Length-i+1:y-Length,:)=I2(x/2+1:x,Length+1:Length+i,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
        Im=I1;
    
    end

             同样可以将覆盖的方向改变,如取与上面相反的覆盖方向就可以实现又一种切换效果了。

    3.2 缩放效果制作

           对于中间的正方形区域可以设计一个缩放的效果,如图3.2.1所示。

                                                                                             图3.2.1 缩放演示效果

     

    这时对正方形赋值的代码如下     

    Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I2(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);

           要实现缩小就需要正方形区域的索引范围以一定速度缩小,最终由下一张图片完全覆盖,实现图3.2.1效果的完整代码如下

    function imageswitch3()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-10-13.jpg',...
        'BingWallpaper-2016-10-14.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/10;%渐变步长
    Length=(y-x)/2;
     % 动画效果一
    while 1
        
        for i=x:-step:step  
            Im=I1;
            Im(x-i+1:x,1:Length,:)=I2(1:i,1:Length,:);
            Im(1:i,y-Length+1:y,:)=I2(x-i+1:x,y-Length+1:y,:);
            
            Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I2(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
        Im=I1;
    end
    end

           同样可以设计一个从中间放大而覆盖图像的效果,这只需要改变上面代码中for中的赋值部分就可以了,至于具体如何修改大家只要参考第4节中的完整代码就行了,限于篇幅这里就不多说了。

    3.3 将动画保存为GIF

           MATLAB 制作gif动态图的基本思想就是,将一张张的静态图组合成一张能动的gif图片,并保存到相应的位置。 那么,要想制作一张动态图,首先要有若干个静态图,并且他们的索引值是连续的。将我们制作的动画保存下来其完整代码如下

    function imageswitch4()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-10-13.jpg',...
        'BingWallpaper-2016-10-14.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/10;%渐变步长
    Length=(y-x)/2;
     % 动画效果一
    
        jo=0;
        for i=x:-step:step  
            Im=I1;
            Im(x-i+1:x,1:Length,:)=I2(1:i,1:Length,:);
            Im(1:i,y-Length+1:y,:)=I2(x-i+1:x,y-Length+1:y,:);
            
            Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I2(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
    
            jo=jo+1;
            %依次输出图片
            print(hFigure,'-dbmp',sprintf('%d',jo))   
        end
        
    %% 依次读取生成的所有图片
    for j=1:jo
        %获取当前图片
        A=imread(sprintf('%d.bmp',j));
        [I,map]=rgb2ind(A,256);
        %生成gif,并保存
        if(j==1)
            imwrite(I,map,'movefig.gif','DelayTime',0.1,'LoopCount',Inf)
        else
            imwrite(I,map,'movefig.gif','WriteMode','append','DelayTime',0.1)    
        end
    end
    
    end

     

           前面第1-33行代码与之前的代码一致,在第37行print(hFigure,'-dbmp',sprintf('%d',jo)) 中hFigure是当前图形窗口的图形句柄,指定输出当前窗口的图像,'-dbmp'指定输出文件格式,sprintf('%d',jo)是对bmp文件命名为jo。后面第41-51行的for循环是遍历刚刚生成的图片将其组合成gif文件,生成的gif文件如图3.2.2所示。

     

     

     

                                                                                                  图3.2.2 movefig.gif

    4. 完整代码

           实现文中开头图中的效果的完整代码如下所示,在MATLAB中新建一个m文件,命名为imageswitch.m运行即可。注意将相应图片放在m文件相同文件夹下,图片的命名需与代码中一致(也可修改代码中文件名)免得出错。下面是本文所用到的图片文件,需要的可以选中复制下来用于测试程序,只是需要改下文件名与这里一致。

    %作品:图片切换动画效果
    %作者:吴限 
    %2018.3.14
    function imageswitch()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-09-27.jpg',...
        'BingWallpaper-2016-10-07.jpg',...
        'BingWallpaper-2016-10-13.jpg',...
        'BingWallpaper-2016-10-14.jpg',...
        'BingWallpaper-2016-12-26.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    I3=imread(Imagename{3});I4=imread(Imagename{4});
    I5=imread(Imagename{5});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);I3=im2double(I3);
    I4=im2double(I4);I5=im2double(I5);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/10;%渐变步长
    Length=(y-x)/2;
    
    while 1
        % 动画效果一
        for i=step:step:x
            % 改变图像数据
            Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);
            Im(x-i+1:x,y-Length+1:y,:)=I2(1:i,y-Length+1:y,:);
    
            Im(1:x/2,Length+1:Length+i,:)=I2(1:x/2,y-Length-i+1:y-Length,:);
            Im(x/2+1:x,y-Length-i+1:y-Length,:)=I2(x/2+1:x,Length+1:Length+i,:);
            
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
       
         % 动画效果二
        Im=I2;
        for i=x:-step:step
            Im=I4;
            Im(x-i+1:x,1:Length,:)=I3(1:i,1:Length,:);
            Im(1:i,y-Length+1:y,:)=I3(x-i+1:x,y-Length+1:y,:);
            
            Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I3(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
        
        
        %动画效果三
        Im=I3;
        for i=x:-step:step
            Im=I1;
            Im(1:i,1:Length,:)=I4(x-i+1:x,1:Length,:);
            Im(x-i+1:x,y-Length+1:y,:)=I4(1:i,y-Length+1:y,:);
            
            Im(1:x/2,Length+1:Length+i,:)=I4(1:x/2,y-Length-i+1:y-Length,:);
            Im(x/2+1:x,y-Length-i+1:y-Length,:)=I4(x/2+1:x,Length+1:Length+i,:);
      
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow  ;%重绘当前图形窗口
        end
        
        %动画效果四
        Im=I4;
        for i=1:step:x
            Im(x-i+1:x,1:Length,:)=I5(1:i,1:Length,:);
            Im(1:i,y-Length+1:y,:)=I5(x-i+1:x,y-Length+1:y,:);
            
            Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I5(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
            
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
        
        Im=I5;
    end
    end

    用到的图片文件:

     

     

     

    BingWallpaper-2016-09-27.jpg

    BingWallpaper-2016-10-07.jpg

    BingWallpaper-2016-10-13.jpg

    BingWallpaper-2016-10-14.jpg

    BingWallpaper-2016-12-26.jpg

          本文中所有代码的完整m文件还有图片文件已经上传,代码经调试通过

    下载链接:https://download.csdn.net/download/qq_32892383/10288793

    有需要的朋友在评论区留言,可以将文件发送至你的邮箱。

    【公众号获取】
    本人微信公众号已创建,扫描以下二维码并关注公众号“AI技术研究与分享”,后台回复“IS20180315”即可获取全部资源文件。

    5. 结束语

           这就是利用MATLAB进行图片切换动画的全部内容了,还有很多炫丽的动画效果可以创造,将动画效果用到PPT演示和GUI设计等方面定能增色不少。本博文介绍的方法在多次修改之下,使其程序更加严谨。由于编者能力有限,代码即使经过了多次校对,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的实现方法也请您不吝赐教。

    展开全文
  • matlab图片叠加的代码流蟒 Deqing的python实现 有关更多信息-> 用法 读/写.flo文件 import sys sys . path . append ( 'flow-python' ) from flowio import readFlowFile , writeFlowFile flow = readFlowFile ( ...
  • matlab仿真图片及其代码天盖 该代码用于模拟巨型麦哲伦望远镜(GMT)的“购置指南”星与波前感测(AGWS)系统收集光的探头。 该项目的目标是确定找到足够明亮的恒星进行波前感测的可能性。 跑步 我在OS X 10.11.4...
  • matlab图片叠加的代码视图变形算法在Python中的实现。 基于Matlab的实现。 使用numpy 1.6.2和opencv-python 2.4.3 目前无法正常工作。 从matlab代码到python的基本转换已经完成,但是,仍然需要接地点来在两个扭曲...
  • 那么,您是否尝试过使用Location而不是Position?例如:x =1:100;y = x.^2;lgd = legend('y = x.^2');set(lgd,'Location','best')而你得到奇怪的结果是正确的?解决这个问题的一种快速方法是仍然使用最佳位置,并提取...

    那么,您是否尝试过使用Location而不是Position?例如:

    x =1:100;

    y = x.^2;

    lgd = legend('y = x.^2');

    set(lgd,'Location','best')

    而你得到奇怪的结果是正确的?解决这个问题的一种快速方法是仍然使用最佳位置,并提取坐标:

    lgd.Position

    你应该得到这样的东西:

    ans =

    0.7734 0.3037 0.1082 0.0200

    映射到:

    [left bottom width height]

    您需要关注左侧和底部.这两个值(左和底)指定从图的左下角到图例的左下角的距离,它们类似于您正在使用的网格框架.

    然后,根据框架的大小(我建议您使用轴([XMIN XMAX YMIN YMAX]),如果可能),您可以精确定位图形在网格中的位置.接下来你要做的是检查图中的图形是否与图例交叉路径(可能根据某个距离阈值定义相对距离函数),如果是,则随机重新定位图例(即更改值)左边和底部)并重复,直到你的条件得到满足.

    如果这仍然困扰你,我可以写一个简短的片段.最后,要知道您可以随时选择将图例放在外面:

    set(lgd,'Location','BestOutside')

    展开全文
  • matlab图片叠加的代码BSPMVIEW 用于玩fMRI统计图的MATLAB程序 可以在以下位置找到在线文档:。 要求统计参数映射(SPM; Wellcome Neuroimaging信任中心;)位于您的MATLAB搜索路径中。 仅在MATLAB 2014b中运行的SPM...
  • matlab图片叠加的代码SPT(线虫中的膜S单体P文章T货架) Python 代码分为src和TestNbs(Jupyter测试笔记本)。 后者用于比较不同的算法并测试代码。 建立在上的Class MovieTracks可以跟踪实时成像电影中的膜结合荧光...
  • Matlab 图片批量复制到word中

    千次阅读 2016-11-01 15:45:00
    gco:返回当前鼠标单击的句柄值,该对象可以是除root对象外的任意图形对象,并且Matlab会把当前图形对象的句柄值存放在Figure的CurrentObject属性中 2 笔记 help中position属性解释:Positioning Figures
  • matlab图片叠加的代码volView 这是用于MATLAB的简单图像堆栈可视化工具。 它基于。 与该项目相比,它具有以下重要变化: imshow3Dfull现在是一个名为volView的类,以简化进一步的开发 大规模重构代码,主要是为了...
  • matlab图片叠加的代码plot_google_map 用于在图形背景上绘制Google地图的MATLAB函数 plot_google_map.m使用Google Maps API在当前图形的背景中绘制地图。 它假定当前图形的坐标在WGS84基准中,并使用转换代码将...
  • matlab图片导出无失真库export_fig介绍 首先,感谢export_fig的作者Yair Altman为相关方面做了很多介绍,本文主要结合新版本matlab,对作者的内容进行搬运和翻译。 export_fig下载地址和介绍如下: github地址:...
  • matlab开发-嵌入和覆盖绘图和图像。目的是说明嵌入和覆盖图和图像的简单示例。
  • matlab图片叠加的代码早期整合 概要 团队的存储库:针对METR4202 2016的“早期集成,稍后升级”解决方案实用3:Domino排序挑战。 包含的是使用的各种文件,函数和脚本。 检测使用matlab工具箱和美元图像检测库。 ...
  • matlab图片叠加的代码S3分段器 Dockerized应用程序,用于对大型组织样本或TMA核心进行分段,并输出细胞核和/或细胞质遮罩,并可以选择输出每个分段细胞的平均强度和中值强度。 细分方法 该管道接收tiff图像堆栈。 在...
  • matlab图片叠加的代码Matlab轮廓分析 Matlab脚本,用于分析Eng等人在《 Current Biology》 2021年使用的拟南芥cotelydon铺面细胞中微管的分布 这些脚本用于分析微管(mCHERRY-TUA5)相对于Cotelydon铺面细胞质膜...
  • 如何使用matlab批量导入图片

    千次阅读 2020-05-01 12:08:35
    如何使用matlab批量导入图片思路程序实现程序中用到的函数dir()函数strcat函数isempty函数save函数eval函数 思路 先对指定文件夹进行扫描,将.jpg等后缀的图片文件信息保存,再依次将每个图片数据导入,最后将每一个...
  • Matlab中实现两张图片的叠加显示效果

    万次阅读 多人点赞 2019-07-05 13:25:20
    matlab中以50%透明度实现两张图图片的叠加显示,图片的大小可以任意设置,不同大小的图片,较小的图片在整幅图中居中显示。
  • matlab图片叠加的代码plot_google_map 用于在图形背景上绘制Google地图的MATLAB函数 plot_google_map.m使用Google Maps API在当前图形的背景中绘制地图。 它假定当前图形的坐标在WGS84基准中,并使用转换代码将...
  • matlab图片叠加的代码交通通道检测器 介绍 该项目会自动检测给定图像中的行车线。 该图像将经过我们的车道检测管道,该管道包括: 将原始图像转换为HLS颜色空间 从HLS中分离出黄色和白色以得到彩色的口罩 按位或黄色...
  • 然后,再打开相应的文档,并在该文档中选择【插入】菜单中的【图片】选项插入相应的图片即可。 --------------------- 作者:hackpig 来源:www.skcircle.com 版权声明:本文为博主原创文章,转载请附上博文链接! #...
  • matlab guide 将matlab处理过的图片保存

    千次阅读 2020-05-25 23:05:59
    这次我来分析如何将matlab处理过的图片保存。 实验效果 经过灰度转换,图象被处理,并显示到另一个地方。 点击保存 图片被保存 实验原理 查看保存的回调函数 function save_Callback(hObject, eventdata, handles...
  • matlab图片叠加的代码 (美国华盛顿州雷纳山的全景图像。) 项目2:全景拼接 ##概述全景拼接是计算机视觉的早期成功。 Matthew Brown和David G. Lowe于2007年出版了一部著名的著作。此后,自动全景拼接技术已在许多...
  • matlab图片叠加的代码虚拟药物兴奋剂实验室 巴克内尔大学路易斯堡,宾夕法尼亚 课程资料 课程名称:CSCI 479 指导老师:孟梦农学期:2020年秋季 学生资料 陈Chen,伊丽莎白·雷诺和珍妮·吴 项目背景 我们的客户CHEM...
  • matlab图片叠加的代码nuc_ctDNA_process ImageJ 1.x宏和Matlab代码,用于处理3D核分类和定量。 此存储库旨在帮助您重新创建在关联的出版物中使用的方法。 如有任何疑问,请随时联系。 如果需要,很高兴进行调试,...
  • matlab图片叠加的代码虚拟药物兴奋剂实验室 巴克内尔大学路易斯堡,宾夕法尼亚 课程资料 课程名称:CSCI 479 指导老师:孟梦农学期:2020年秋季 学生资料 陈Chen,伊丽莎白·雷诺和珍妮·吴 项目背景 我们的客户CHEM...
  • Matlab循环中如何实现print自动存图片 如:print('-dtiff','-r300','w.tiff'); 此处,本意想以变量w (1 2 3 ...)作为tiff图片的文件名,而此程序序号无法实现增加,新图片将旧的覆盖掉了。请问如何才能实现用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,185
精华内容 1,274
关键字:

matlab图片覆盖

matlab 订阅