MATLAB 制作抖音同款故障风海报

2024-01-08 13:48

本文主要是介绍MATLAB 制作抖音同款故障风海报,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果:
在这里插入图片描述
在这里插入图片描述

步骤
1.参数设定及图片导入

可以只更改背景图片其实

bkgPic=imread(‘test.jpg’);%图片地址
lineDensity=0.6; %故障线条出现概率
lineLenRange=[50,80]; %故障线条长度范围
greenMoveLen=10; %绿移距离

原始图片:
在这里插入图片描述

2.图片灰度化及红蓝背景构造
[m,n,k]=size(bkgPic);
if k~=1bkgPic=rgb2gray(bkgPic);
endmatSize=[n,m];
vector=[1,0];
colorList=[21    27   14368    22   11394    72   151175   152   192221   188   204217   156   174203    82   104232    31    37151     5    11];colorMat=vColorMat(matSize,vector,colorList);
blueRedPic=uint8(double(colorMat).*double(bkgPic)./200);

其中所需要的渐变图构造函数可以看这篇博客:
MATLAB 各类二维渐变图
所用到的渐变图构造函数在这:

function colorMat=vColorMat(matSize,vector,colorList)
% matSize=[800,600];
% vector=[1,12];
% colorList=[195    53    93
%    211   102   141
%    231   179   192
%    229   182   172
%    227   178   137
%    238   191   147
%    236   195   113];
% colorMat=vColorMat(matSize,vector,colorList)
% imshow(colorMat)vector=vector./norm(vector);
[xMesh,yMesh]=meshgrid(0:matSize(2)-1,0:matSize(1)-1);
zMesh=xMesh.*vector(2)+yMesh.*vector(1);
zMesh=(zMesh-min(min(zMesh)))./(max(max(zMesh))-min(min(zMesh)));colorFunc=colorFuncFactory(colorList);
colorMesh=colorFunc(zMesh);colorMat(:,:,1)=colorMesh(end:-1:1,1:matSize(1));
colorMat(:,:,2)=colorMesh(end:-1:1,matSize(1)+1:2*matSize(1));
colorMat(:,:,3)=colorMesh(end:-1:1,2*matSize(1)+1:3*matSize(1));colorMat=uint8(colorMat);function colorFunc=colorFuncFactory(colorList)x=(0:size(colorList,1)-1)./(size(colorList,1)-1);y1=colorList(:,1);y2=colorList(:,2);y3=colorList(:,3);colorFunc=@(X)[interp1(x,y1,X,'linear')',interp1(x,y2,X,'linear')',interp1(x,y3,X,'linear')'];endend

红蓝渐变图效果:

当然大家可以自己取色制作其他渐变
在这里插入图片描述
背景叠加效果:
在这里插入图片描述

3.绿移

将绿色通道向左侧移动几像素,为了方便起见就没有在右侧补充像素,因此绿移后的图像宽度会少几个像素(有保留原图像大小需求的可以尝试自行改写我的代码,只需要将图像两侧提前扩充好再进行像素移动即可)

Rchannel=blueRedPic(:,1+greenMoveLen:end,1);
Gchannel=blueRedPic(:,1:end-greenMoveLen,2);
Bchannel=blueRedPic(:,1+greenMoveLen:end,3);
gm_brPic(:,:,1)=Rchannel;
gm_brPic(:,:,2)=Gchannel;
gm_brPic(:,:,3)=Bchannel;

绿移效果:

可以看出人物主体出现了明显绿色偏移
在这里插入图片描述

4.添加故障线条

先随机抽取一定量不重复整数,在被抽中的行使用’motion’动态模糊滤波器,模糊长度由lineLenRange参数决定:

tempRand=rand(1,m);
[~,movePos]=sort(tempRand);
movePos=movePos(1:floor(m*lineDensity));
movePos=sort(movePos);movePic=gm_brPic(movePos,:,1);for i=1:size(movePic,1) H = fspecial('motion',randi(lineLenRange,[1,1]),0);movePic(i,:) = imfilter(movePic(i,:),H,'replicate');
endgm_brPic(movePos,:,1)=movePic;
imshow(gm_brPic);

效果:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.完整代码

两个m文件:
BlueRed.m

function BlueRed
bkgPic=imread('test6.jpg');%图片地址
lineDensity=0.6;           %故障线条出现概率
lineLenRange=[50,80];      %故障线条长度范围
greenMoveLen=10;           %绿移距离[m,n,k]=size(bkgPic);
if k~=1bkgPic=rgb2gray(bkgPic);
endmatSize=[n,m];
vector=[1,0];
colorList=[21    27   14368    22   11394    72   151175   152   192221   188   204217   156   174203    82   104232    31    37151     5    11];colorMat=vColorMat(matSize,vector,colorList);
blueRedPic=uint8(double(colorMat).*double(bkgPic)./200);Rchannel=blueRedPic(:,1+greenMoveLen:end,1);
Gchannel=blueRedPic(:,1:end-greenMoveLen,2);
Bchannel=blueRedPic(:,1+greenMoveLen:end,3);
gm_brPic(:,:,1)=Rchannel;
gm_brPic(:,:,2)=Gchannel;
gm_brPic(:,:,3)=Bchannel;tempRand=rand(1,m);
[~,movePos]=sort(tempRand);
movePos=movePos(1:floor(m*lineDensity));
movePos=sort(movePos);movePic=gm_brPic(movePos,:,1);for i=1:size(movePic,1) H = fspecial('motion',randi(lineLenRange,[1,1]),0);movePic(i,:) = imfilter(movePic(i,:),H,'replicate');
endgm_brPic(movePos,:,1)=movePic;
imshow(gm_brPic);
end

vColorMat.m

function colorMat=vColorMat(matSize,vector,colorList)
% matSize=[800,600];
% vector=[1,12];
% colorList=[195    53    93
%    211   102   141
%    231   179   192
%    229   182   172
%    227   178   137
%    238   191   147
%    236   195   113];
% colorMat=vColorMat(matSize,vector,colorList)
% imshow(colorMat)vector=vector./norm(vector);
[xMesh,yMesh]=meshgrid(0:matSize(2)-1,0:matSize(1)-1);
zMesh=xMesh.*vector(2)+yMesh.*vector(1);
zMesh=(zMesh-min(min(zMesh)))./(max(max(zMesh))-min(min(zMesh)));colorFunc=colorFuncFactory(colorList);
colorMesh=colorFunc(zMesh);colorMat(:,:,1)=colorMesh(end:-1:1,1:matSize(1));
colorMat(:,:,2)=colorMesh(end:-1:1,matSize(1)+1:2*matSize(1));
colorMat(:,:,3)=colorMesh(end:-1:1,2*matSize(1)+1:3*matSize(1));colorMat=uint8(colorMat);function colorFunc=colorFuncFactory(colorList)x=(0:size(colorList,1)-1)./(size(colorList,1)-1);y1=colorList(:,1);y2=colorList(:,2);y3=colorList(:,3);colorFunc=@(X)[interp1(x,y1,X,'linear')',interp1(x,y2,X,'linear')',interp1(x,y3,X,'linear')'];endend

最前面提到的参数调整的不同会有不一样的效果哟

这篇关于MATLAB 制作抖音同款故障风海报的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/583657

相关文章

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

故障定位快人一步! 华为交换机排障命令汇总

《故障定位快人一步!华为交换机排障命令汇总》在使用华为交换机进行故障排查时,首先需要了解交换机的当前状态,通过执行基础命令,可以迅速获取到交换机的系统信息、接口状态以及配置情况等关键数据,为后续的故... 目录基础系统诊断接口与链路诊断L2切换排障L3路由与转发高级调试与日志性能、安全与扩展IT人无数次实战

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密