利用Matlab制作抖音同款含褶皱面料图

目录
  • 效果如下
  • 步骤
    • 1.导入图片
    • 2.图片扩张
    • 3.像素映射
    • 4.正片叠底
    • 5.完整代码

效果如下

步骤

1.导入图片

我们需要导入一张褶皱图片(background.jpg)以及一张前景图片(foreground.jpg),将褶皱图片灰度化,将前景图调整至与褶皱图片相同大小:

bkgPic=imread('background.jpg');
bkgPic=rgb2gray(bkgPic);
forePic=imread('foreground.jpg');
forePic=imresize(forePic,size(bkgPic));

原图在这里:

2.图片扩张

因为我们要对前景图片进行拉伸,难免边角处缺一块,因此我们首先将边缘处颜色往外扩展几圈(13圈)

exforePic=uint8(zeros(size(forePic)+[26,26,0]));
exforePic(14:end-13,14:end-13,1)=forePic(:,:,1);
exforePic(14:end-13,14:end-13,2)=forePic(:,:,2);
exforePic(14:end-13,14:end-13,3)=forePic(:,:,3);

for i=1:13
    exforePic(i,14:end-13,:)=forePic(1,:,:);
    exforePic(end+1-i,14:end-13,:)=forePic(end,:,:);
    exforePic(14:end-13,i,:)=forePic(:,1,:);
    exforePic(14:end-13,end+1-i,:)=forePic(:,end,:);
end
for i=1:3
    exforePic(1:13,1:13,i)=forePic(1,1,i);
    exforePic(end-13:end,end-13:end,i)=forePic(end,end,i);
    exforePic(end-13:end,1:13,i)=forePic(end,1,i);
    exforePic(1:13,end-13:end,i)=forePic(1,end,i);
end

扩展后图片(图片下侧明显一点):

3.像素映射

原理借鉴ps扭曲置换的原理,亮度较大的像素(大于128)取右下角像素RGB值进行置换,亮度较小的像素(小于128)取左上角像素RGB值进行置换,由于

(255-128)/10=12.7

(0-128)/10=-12.8

各个像素点与替换像素点的距离不超过13,因此上一步共扩展了13圈。

同时因为各个像素分布为整数点位置,而位置差计算一般都不是整数,因此我们要对偏移距离向上向下取整,获得两个像素点RGB值,并对这两点数值进行线性插值即可

newforePic=uint8(zeros(size(forePic)));
for i=1:size(bkgPic,1)
    for j=1:size(bkgPic,2)
        goffset=(double(bkgPic(i,j))-128)/10;
        offsetLim1=floor(goffset)+13;
        offsetLim2=ceil(goffset)+13;
        sep1=goffset-floor(goffset);
        sep2=ceil(goffset)-goffset;
        c1=double(exforePic(i+offsetLim1,j+offsetLim1,:));
        c2=double(exforePic(i+offsetLim2,j+offsetLim2,:));
        if sep1==0
            c=double(exforePic(i+offsetLim1,j+offsetLim1,:));
        else
            c=c2.*sep1+c1.*sep2;
        end
        newforePic(i,j,:)=c;
    end
end

像素值映射结果:

4.正片叠底

将两张图片叠加起来

公式:混合色×基色 / 255=结果色

由于正片叠底后所出图片较暗,这里我们选择除以220而不是255:

newforePic=uint8((double(newforePic).*double(bkgPic))./220);
imwrite(newforePic,'result.jpg')
imshow(newforePic)

5.完整代码

function clothFold
bkgPic=imread('background.jpg');
bkgPic=rgb2gray(bkgPic);
forePic=imread('foreground.jpg');
forePic=imresize(forePic,size(bkgPic));

exforePic=uint8(zeros(size(forePic)+[26,26,0]));
exforePic(14:end-13,14:end-13,1)=forePic(:,:,1);
exforePic(14:end-13,14:end-13,2)=forePic(:,:,2);
exforePic(14:end-13,14:end-13,3)=forePic(:,:,3);

for i=1:13
    exforePic(i,14:end-13,:)=forePic(1,:,:);
    exforePic(end+1-i,14:end-13,:)=forePic(end,:,:);
    exforePic(14:end-13,i,:)=forePic(:,1,:);
    exforePic(14:end-13,end+1-i,:)=forePic(:,end,:);
end
for i=1:3
    exforePic(1:13,1:13,i)=forePic(1,1,i);
    exforePic(end-13:end,end-13:end,i)=forePic(end,end,i);
    exforePic(end-13:end,1:13,i)=forePic(end,1,i);
    exforePic(1:13,end-13:end,i)=forePic(1,end,i);
end

newforePic=uint8(zeros(size(forePic)));
for i=1:size(bkgPic,1)
    for j=1:size(bkgPic,2)
        goffset=(double(bkgPic(i,j))-128)/10;
        offsetLim1=floor(goffset)+13;
        offsetLim2=ceil(goffset)+13;
        sep1=goffset-floor(goffset);
        sep2=ceil(goffset)-goffset;
        c1=double(exforePic(i+offsetLim1,j+offsetLim1,:));
        c2=double(exforePic(i+offsetLim2,j+offsetLim2,:));
        if sep1==0
            c=double(exforePic(i+offsetLim1,j+offsetLim1,:));
        else
            c=c2.*sep1+c1.*sep2;
        end
        newforePic(i,j,:)=c;
    end
end

%grayForePic=rgb2gray(newforePic);
%rate=double(bkgPic)./double(grayForePic);

newforePic=uint8((double(newforePic).*double(bkgPic))./220);
imwrite(newforePic,'result.jpg')
imshow(newforePic)
end

注:

若是17年及之前版本,需将代码最后的

newforePic=uint8((double(newforePic).*double(bkgPic))./220);

改为(三个通道分别处理):

newforePic(:,:,1)=uint8((double(newforePic(:,:,1)).*double(bkgPic))./220);
newforePic(:,:,2)=uint8((double(newforePic(:,:,2)).*double(bkgPic))./220);
newforePic(:,:,3)=uint8((double(newforePic(:,:,3)).*double(bkgPic))./220);

到此这篇关于利用Matlab制作抖音同款含褶皱面料图的文章就介绍到这了,更多相关Matlab褶皱面料图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 利用Matlab绘制地图的超详细教程

    目录 MappingToolbox工具箱安装 局部区域陆地绘制 映射贴图 纹理贴图 线路图绘制 usamap axesm 一些地图绘制可用简易函数 subplot tightmap 边框标签网格快速开关函数 colormap colorbar worldmap和usamap是axesm的子类,worldmap是用于生成世界地图坐标区域,usamap用于生成美国地图坐标区域,本文先在worldmap函数基础上讲解如何导入各种数据绘制各种类型图片,略提一下如何使用usamap,再讲解axesm的各种

  • 基于Matlab绘制超绚丽的烟花的过程详解

    目录 1.使用效果 2.随机点生成 3.图像膨胀 4.特效「风」模拟 5.级坐标变换 6.图像模糊及再映射 7.图像上色 8.完整代码 1.使用效果 2.随机点生成 我们要构造一个黑色背景,对其添加高斯噪声,然后依据阈值删掉部分噪声,生成一张随机点图片: % 构造黑色背景并生成白色杂点 blackPic=uint8(zeros(800,800)); distPic=imnoise(blackPic,'gaussian',0, 0.11); distPic(distPic<254)=0; 3.图像

  • 详解Matlab绘制3D玫瑰花的方法(内附旋转版本)

    目录 1.玫瑰花绘制 绘制效果 完整代码 2.月季花绘制 绘制效果 完整代码 3.玫瑰配色 4.旋转版本 1.玫瑰花绘制 绘制效果 完整代码 function drawrose grid on [x,t]=meshgrid((0:24)./24,(0:0.5:575)./575.*20.*pi+4*pi); p=(pi/2)*exp(-t./(8*pi)); change=sin(15*t)/150; u=1-(1-mod(3.6*t,2*pi)./pi).^4./2+change; y=2*(

  • 利用Matlab绘制一个可爱的南瓜灯

    目录 效果及原理 原理 实现方法 完整代码 效果及原理 效果如下: 调一下数据还能改成三角眼: 原理 南瓜主体函数从知友 [九章算法] 的一张图而来,大体是瓜身瓜柄分段函数,然后绕着z轴旋转一周得到曲面,我对数值做了微调,原图及原始数据: 实现方法 这里我故意保留了网格让南瓜看起来有一点布娃娃的感觉,(大家也可以根据自己喜好改写,例如将’EdgeColor’设置为’none’并打个光啥的) % 构造网格 [t,p]=meshgrid(linspace(0,2*pi,200),linspace(0

  • 利用Matlab制作一款刮刮乐抽奖特效

    目录 1.效果展示 2.程序原理说明 2.1奖项设置 2.2随机抽取 2.3绘制图层 2.4滑动鼠标刮奖 3.完整代码 1.效果展示 程序运行效果如下: 如图所示,按住鼠标不松开并滑动鼠标,即可刮开图层: 2.程序原理说明 2.1 奖项设置 奖项设置写在一个cell元胞数组中,第一列为文本信息,第二列为抽到的概率: strSet={'520元红包一个',15/100; '1314元红包一个',5/100; '黑丝水手服',20/100; '黑丝女仆装',20/100; '抱抱×50次',20/1

  • 利用Matlab绘制一款专属进度条

    目录 1.使用效果 2.制作历程 3.函数用法 4.工具函数完整代码 waitBar_SL1.m waitBar_SL2.m waitBar_SL3.m waitBar_SL4.m 5.下载地址 1.使用效果 2.制作历程 首先我有个程序需要用到进度条,我首先试了一下MATLAB自带的进度条: bar=waitbar(0,'读取数据中...'); % waitbar显示进度条 for i=1:1000 A(i)=rand(); str=['计算中...',num2str(100*i/1000),

  • 利用Matlab制作抖音同款含褶皱面料图

    目录 效果如下 步骤 1.导入图片 2.图片扩张 3.像素映射 4.正片叠底 5.完整代码 效果如下 步骤 1.导入图片 我们需要导入一张褶皱图片(background.jpg)以及一张前景图片(foreground.jpg),将褶皱图片灰度化,将前景图调整至与褶皱图片相同大小: bkgPic=imread('background.jpg'); bkgPic=rgb2gray(bkgPic); forePic=imread('foreground.jpg'); forePic=imresize(

  • 如何利用Matlab制作一款真正的拼图小游戏

    效果: 简单原理介绍: 1构造0,1矩阵作为每片拼图的透明度,可以构造出不规则形状的拼图(image函数有alphaData属性可以设置) jigsawMask=zeros(101*5,101*5); jigsawMask(102:404,102:404)=1; [xMesh,yMesh]=meshgrid(1:101*5,1:101*5); dis1=sqrt((xMesh-51).^2+(yMesh-253).^2); dis2=sqrt((xMesh-505+50).^2+(yMesh-2

  • 利用Matlab制作一款3D版2048小游戏

    其实逻辑和2维版本完全一样,就不进行详细解说了,直接看效果: 效果: 目前界面还不咋好看,期待大家的优化 还是键盘↑↓←→操作嗷 完整代码: function game20483D global squaremap global colorlist global fontsizelist global baseX baseY baseZ global barHdl textHdl global txtBest txtScore global best fig=figure('units','pi

  • 利用Matlab制作一款狗头翻牌子小游戏

    目录 0游戏效果 1fig界面和背景板 2狗狗牌子与胜利标志 2.1狗狗牌子绘制 2.2游戏胜利标签 2.3鼠标点击牌子回调 3游戏难度按钮组 3.1按钮绘制 3.2难度选择回调 4游戏刷新模块 4.1刷新游戏按钮绘制 4.2模拟鼠标点击 4.3刷新游戏回调 5完整代码 0 游戏效果 就是点击一个牌子时,该牌子和周围四个牌子也会相应发生变化,想办法让所有牌子都在同一面即为游戏胜利. 1 fig界面和背景板 这一段比较简单,主要是对界面和背景板的属性设置,我们采用编程的方式调用app design

  • 利用Matlab制作环形相册效果详解

    目录 运行效果 完整步骤 1.图片准备及导入 2.为每张图片制作遮罩层 3.调整每张图大小 4.绘图及绘图参数详解 完整代码 运行效果 完整步骤 1.图片准备及导入 要制作一款相册足够的图片量是必不可少的,不然整个相册只有一张图来回重复多没意思呀,因此我们需要一个文件夹专门放图片,为了方便导入,这里全部都是jpg格式: 图片导入代码: path='.\album\';%文件夹路径 files=dir(fullfile(path,'*.jpg')); picNum=size(files,1); %

  • python gui开发——制作抖音无水印视频下载工具(附源码)

    hello,大家好啊,失踪人口回归了 [捂脸]!本次使用tkinter撰写一篇 抖音无水印视频下载,目的很纯粹,就是为了设置 微信状态视频.本篇博文中,我会写下我的代码撰写思路以及想写设计流程,代码放在了第四节,工具打包好放在了 蓝奏云,慢慢看,后面有链接. 一.准备工作 本次要用到以下依赖库:re json os random tkinter threading requests pillow 其中后两个需要安装后使用 二.预览 0.复制抖音分享短链接 1.启动 2.运行 3.结果 (小姐姐挺

  • 利用Matlab制作三子棋游戏的示例代码

    效果: 注: 由于用uifigure和uiaxes写的会比较慢,改成常规的axes和figure会快很多. 完整代码: function OX_chess fig=uifigure('units','pixels',... 'position',[350 100 500 500],... 'Numbertitle','off',... 'name','OX_chess',... 'Color',[1 1 1],... 'resize','off',... 'menubar','none'); a

  • 基于Matlab实现抖音小游戏苹果蛇

    最近抖音上苹果蛇小游戏大火,为了证明MATLAB无所不能,咋能不跟风做一个?于是就有了这一篇. 还是提一句这个小游戏开始玩的心路历程: 第1-5关:?这不就是有重力的贪吃蛇,有任何难度嘛?? 第6关:嗯...这个小技巧还是有点意思的 第30关:???这绕来绕去的是人出的题目?? 第90关:… …疯了疯了已经疯了 废话不多说看一下MATLAB版的完整代码: 为了方便修改,关卡地图就摆在m文件里,总共写了八关,但是只有代码没有素材包还是运行不了,因此请从文末获取完整压缩包. function app

  • 使用Compose制作抖音快手视频进度条Loading动画效果

    目录 引言 Loading效果 BoxWithConstraints代码 animateFloat获取动画更新值 线条动画值 执行渐隐 最终效果 引言 现在互联网产品,感觉谁家的App不整点视频功能,严格意义上都不能说是一个现代互联网App了,我们知道最火的是抖音.快手这类短视频App,在刷视频的同时,他们的App交互上面的一些特色能让我们一直沉浸在刷视频中: 比如,我们今天要聊的,短视频翻页流列表,视频加载缓冲的时候,Loading的设计: 它设计:在视频底部,进度条上面,当视频缓冲加载等待的

随机推荐