您的位置:首页 > 编程语言 > MATLAB

MATLAB 制作抖音同款旋转星空海报图

2021-04-06 11:55 776 查看

大概像是下面这样(我是真的不会设计海报,大家凑乎着看叭)

我们要制作的就是上面这样的背景图,文章最后由完整代码

步骤

1.导入图片

导入图片并获得长宽及通道数信息,图片需要和m文件在同一文件夹:

I=imread('test.jpeg');
[W,H,nChanels]=size(I);

我用的原图在这里:

2.将图片扭曲到合适角度
degree=15;
eddy_mat=zeros(W,H,nChanels);
swirl_degree=degree./1000;
midX=W/2;
midY=H/2;

for y=1:H
for x=1:W
Yoffset=y-midY;
Xoffset=x-midX;

radian=atan2(Yoffset,Xoffset);
radius=sqrt(Xoffset^2+Yoffset^2);
X=int32(radius*cos(radian+radius*swirl_degree)+midX);
Y=int32(radius*sin(radian+radius*swirl_degree)+midY);

X(X>W)=W;Y(Y>H)=H;
X(X<1)=1;Y(Y<1)=1;
eddy_mat(x,y,:)=I(X,Y,:);
end
end
eddy_mat=uint8(eddy_mat);

3.构造映射矩阵

其实就是灰度化这张图,我们要根据图片的亮度绘制曲面,因而用灰度图做高度索引再适合不过

map_mat=rgb2gray(eddy_mat);

4.构造曲面,上色并调整角度

使用灰度图构造曲面,再把有色图贴图上去

[Xmesh,Ymesh]=meshgrid(1:H,1:W);
surf(Xmesh,map_mat,Ymesh,'EdgeColor','none','LineWidth',0.01,'CData',eddy_mat,'FaceColor','interp')

调整曲面角度,为了方便截图,可以把背景设置成黑色

axes=gca;
axes.PlotBoxAspectRatio=[0.6860    0.6875    1.0000];
axes.CameraPosition=[-0.9862    2.2773    1.5062].*1e3;
axes.Color=[0 0 0];



注可以将figure调大后截图

5.完整代码及成品效果

完整代码:

function FarGate
I=imread('test.jpeg');
[W,H,nChanels]=size(I);
degree=15;
eddy_mat=zeros(W,H,nChanels);
swirl_degree=degree./1000;
midX=W/2;
midY=H/2;

for y=1:H
for x=1:W
Yoffset=y-midY;
Xoffset=x-midX;

radian=atan2(Yoffset,Xoffset);
radius=sqrt(Xoffset^2+Yoffset^2);
X=int32(radius*cos(radian+radius*swirl_degree)+midX);
Y=int32(radius*sin(radian+radius*swirl_degree)+midY);

X(X>W)=W;Y(Y>H)=H;
X(X<1)=1;Y(Y<1)=1;
eddy_mat(x,y,:)=I(X,Y,:);
end
end
eddy_mat=uint8(eddy_mat);disp('已完成图像旋转...'),pause(0.5)

%T=affine2d([1 0 0;0 1 0;0 0 1]);
%dst_mat=imwarp(eddy_mat,T);
imshow(eddy_mat)

map_mat=rgb2gray(eddy_mat);disp('已获得映射矩阵...'),pause(0.5)
imshow(map_mat)

[Xmesh,Ymesh]=meshgrid(1:H,1:W);
surf(Xmesh,map_mat,Ymesh,'EdgeColor','none','LineWidth',0.01,'CData',eddy_mat,'FaceColor','interp')disp('已构造曲面...'),pause(0.5)

axes=gca;
axes.PlotBoxAspectRatio=[0.6860    0.6875    1.0000];
axes.CameraPosition=[-0.9862    2.2773    1.5062].*1e3;
axes.Color=[0 0 0];disp('已调整曲面角度')

end

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: