如何在matlab中将背景图像放入电影中

时间:2010-06-03 18:55:17

标签: matlab

我需要在使用MATLAB创建的电影中放置背景图像吗?


我在下面发布了一个示例代码,说明我如何在Matlab中生成一部电影。我需要为这部电影添加背景图片。谢谢你的帮助。

for i=1:128
    for j=1:128
        p(i,j,:)=randn(1,200);
    end
end
[u,v,w]=size(p);

frm_r=1:128;  
frm_c=1:128;

figure; j=1;
for t=1:w  
    surface(frm_c,frm_r,p(:,:,t),'EdgeColor','none');
    pause(0.1)
    colorbar;
    F(j) = getframe;
    j=j+1;
end
movie(F,1,50) 

1 个答案:

答案 0 :(得分:1)

如果您可以访问创建影片的MATLAB代码,则可以将带有IMAGE或IMSHOW的轴作为背景放置,并使其顶部的轴透明。

这是一个简单的例子:

im = image; % create image object (default pic)
imax = get(im,'parent'); % get image axes handle
axis ij
set(imax,'position',[0 0 1 1]) % make it to fill the whole figure

ax = axes; % new axes
h = plot(ax,rand(100),'ro'); % initial plot
for i=1:20
    set(h,'ydata',rand(100,1)); % change the data in a loop
    pause(0.1)
end

如果您向代码展示如何制作电影,则可以获得更好的答案。

修改

我简化了你的答案中的代码。例如,您不需要循环来填充3D数组。而且您不需要在循环中重复表面功能。只需更改zdata属性。

尝试此代码(将yourimage.jpg替换为真实文件名):

p = randn(128,128,200);
[u,v,w]=size(p);
frm_r=1:128;
frm_c=1:128;

figure; 
im = imshow('yourimage.jpg'); % create and display image object from a file
imax = get(im,'parent'); % get image axes handle
set(imax,'position',[0 0 1 1]) % make it to fill the whole figure

ax = axes('color','none'); % new axes
hsurf = surface(frm_c,frm_r,p(:,:,1),'EdgeColor','none','Parent',ax); 
colorbar; 
xlim([1 u])
ylim([1 v])

j=1; 
for t=1:w
    set(hsurf,'zdata',p(:,:,t))
    F(j) = getframe; 
    j=j+1; 
end
movie(F,1,50)