返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >利用Matlab一键生成工地海报特效
  • 512
分享到

利用Matlab一键生成工地海报特效

2024-04-02 19:04:59 512人浏览 八月长安
摘要

目录1.使用效果2.图片准备和导入3.图像倾斜4.扭曲置换5.正交叠底6.缘修整(抠图)7.背景图像替换8.完整代码1.使用效果 这篇的本质还是扭曲置换,其实看过前面几篇文章的应

1.使用效果

这篇的本质还是扭曲置换,其实看过前面几篇文章的应该都能猜出是怎样做到的,下面开始讲解:

2.图片准备和导入

首先m文件所在文件夹内应该有如下两张图:

此外还需要一张近似方形的图片也要一起放在文件夹中,之后通过以下代码导入和初步处理图片(选择幕布部分和去色代码,可左右滑动):

bkgPic=imread('bkg.jpg');                 % 背景图
screenPic=bkgPic(190:555,(190:555)+160,:);% 幕布区域图片
grayscreenPic=rgb2gray(screenPic);        % 灰度化幕布区域图片

screenRange=imread('screenRange.jpg');    % 幕布范围图(用来扣幕布边缘细节)
screenRange=rgb2gray(screenRange);

forePic=imread('2048.jpg');               % 要做成海报的图片

3.图像倾斜

我们可以看出幕布是有些倾斜的,我们为了让图片和幕布更加贴近,我们将图片进行倾斜处理并将其调整至与幕布区域相似的大小:

% 前景图片变形=============================================================
tfORM=affine2d([1 -0.02 0;-0.02 1 0; 0 0 1]);
forePic=imwarp(forePic,tform);
exforePic=imresize(forePic,size(grayscreenPic)+26);

4.扭曲置换

这部分参考之前布料贴图的部分呀:

% 扭曲置换=================================================================
for i=1:size(grayscreenPic,1)
    for j=1:size(grayscreenPic,2)
        Goffset=(double(grayscreenPic(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

5.正交叠底

% 正交叠底=================================================================
newforePic=uint8((double(newforePic).*double(grayscreenPic))./220);
% imshow(newforePic)
% 旧版本的用下面这段代码
% newforePicR=double(newforePic(:,:,1)).*double(grayscreenPic)./220;
% newforePicG=double(newforePic(:,:,2)).*double(grayscreenPic)./220;
% newforePicB=double(newforePic(:,:,3)).*double(grayscreenPic)./220;
% newforePic(:,:,1)=newforePicR;
% newforePic(:,:,2)=newforePicG;
% newforePic(:,:,3)=newforePicB;
% newforePic=uint8(newforePic);

6.缘修整(抠图)

上方正交叠底后,幕布外面还是灰色,而且幕布内容部分超出幕布范围,我们可以用幕布范围图修整幕布:

% 边缘修整=================================================================
screenPicR=screenPic(:,:,1);newforePicR=newforePic(:,:,1);
screenPicG=screenPic(:,:,2);newforePicG=newforePic(:,:,2);
screenPicB=screenPic(:,:,3);newforePicB=newforePic(:,:,3);
screenPicR(screenRange>20)=newforePicR(screenRange>20);
screenPicG(screenRange>20)=newforePicG(screenRange>20);
screenPicB(screenRange>20)=newforePicB(screenRange>20);
screenPic(:,:,1)=screenPicR;
screenPic(:,:,2)=screenPicG;
screenPic(:,:,3)=screenPicB;
screenPic=uint8(screenPic);

7.背景图像替换

% 将背景图幕布区域换为新图=================================================
bkgPic(190:555,(190:555)+160,:)=screenPic;
imshow(bkgPic)

8.完整代码

function consPoster
bkgPic=imread('bkg.jpg');                 % 背景图
screenPic=bkgPic(190:555,(190:555)+160,:);% 幕布区域图片
grayscreenPic=rgb2gray(screenPic);        % 灰度化幕布区域图片

screenRange=imread('screenRange.jpg');    % 幕布范围图(用来扣幕布边缘细节)
screenRange=rgb2gray(screenRange);

forePic=imread('2048.jpg');               % 要做成海报的图片

% 前景图片变形=============================================================
tform=affine2d([1 -0.02 0;-0.02 1 0; 0 0 1]);
forePic=imwarp(forePic,tform);
exforePic=imresize(forePic,size(grayscreenPic)+26);

% 扭曲置换=================================================================
for i=1:size(grayscreenPic,1)
    for j=1:size(grayscreenPic,2)
        goffset=(double(grayscreenPic(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

% 正交叠底=================================================================
newforePic=uint8((double(newforePic).*double(grayscreenPic))./220);
% imshow(newforePic)
% 旧版本的用下面这段代码
% newforePicR=double(newforePic(:,:,1)).*double(grayscreenPic)./220;
% newforePicG=double(newforePic(:,:,2)).*double(grayscreenPic)./220;
% newforePicB=double(newforePic(:,:,3)).*double(grayscreenPic)./220;
% newforePic(:,:,1)=newforePicR;
% newforePic(:,:,2)=newforePicG;
% newforePic(:,:,3)=newforePicB;
% newforePic=uint8(newforePic);

% 边缘修整=================================================================
screenPicR=screenPic(:,:,1);newforePicR=newforePic(:,:,1);
screenPicG=screenPic(:,:,2);newforePicG=newforePic(:,:,2);
screenPicB=screenPic(:,:,3);newforePicB=newforePic(:,:,3);
screenPicR(screenRange>20)=newforePicR(screenRange>20);
screenPicG(screenRange>20)=newforePicG(screenRange>20);
screenPicB(screenRange>20)=newforePicB(screenRange>20);
screenPic(:,:,1)=screenPicR;
screenPic(:,:,2)=screenPicG;
screenPic(:,:,3)=screenPicB;
screenPic=uint8(screenPic);
% imshow(screenPic)

% 将背景图幕布区域换为新图=================================================
bkgPic(190:555,(190:555)+160,:)=screenPic;
imshow(bkgPic)
end

以上就是利用Matlab一键生成工地海报特效的详细内容,更多关于Matlab海报特效的资料请关注编程网其它相关文章!

--结束END--

本文标题: 利用Matlab一键生成工地海报特效

本文链接: https://lsjlt.com/news/144377.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 利用Matlab一键生成工地海报特效
    目录1.使用效果2.图片准备和导入3.图像倾斜4.扭曲置换5.正交叠底6.缘修整(抠图)7.背景图像替换8.完整代码1.使用效果 这篇的本质还是扭曲置换,其实看过前面几篇文章的应...
    99+
    2024-04-02
  • 怎么利用Matlab一键生成工地海报特效
    本篇内容介绍了“怎么利用Matlab一键生成工地海报特效”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.使用效果2.图片准备和导入首先m文...
    99+
    2023-06-29
  • 利用Matlab制作一款刮刮乐抽奖特效
    目录1.效果展示2.程序原理说明2.1奖项设置2.2随机抽取2.3绘制图层2.4滑动鼠标刮奖3.完整代码1.效果展示 程序运行效果如下: 如图所示,按住鼠标不松开并滑动鼠标,即可刮...
    99+
    2024-04-02
  • 如何利用Matlab制作一款刮刮乐抽奖特效
    这篇文章给大家分享的是有关如何利用Matlab制作一款刮刮乐抽奖特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.效果展示程序运行效果如下:如图所示,按住鼠标不松开并滑动鼠标,即可刮开图层:2.程序原理说明2...
    99+
    2023-06-29
  • 拿来就用的Java海报生成器ImageCombiner(一)
    背景 如果您是UI美工大师或者PS大牛,那本文一定不适合你;如果当您需要自己做一张海报时,可以立马有小伙伴帮您实现,那本文大概率也不适合你。但是,如果你跟我一样,遇上到以下场景,最近公司上了不少传播方面的需求,需要合成各种营销图片。...
    99+
    2023-09-05
    java Powered by 金山文档
  • 利用Java自写一个生成ID的工具类
    平时项目中只要涉及表,那么一定能接触到众多各式各样的ID编号,博主整理一些常用的ID格式,整合一个ID生成工具类,供大家参考,如果有什么不足指出,烦请留言批评指正,尽量改正,感激不尽...
    99+
    2022-11-13
    Java生成ID工具类 Java生成ID Java ID
  • 小程序uniapp利用canvas生成海报并可以保存至相册
    ✨uniapp实现生成海报并保存至相册组件,u-popup可以根据自己所使用的组件进行替换 这里主要讲的是JS部分,css和元素相关的就不展开赘述了,下方先给大伙看看效果图,图的下方有代码讲解,最下方有完整代码,如各位大神发现问题后请友好的...
    99+
    2023-08-16
    uni-app javascript 前端 微信小程序 vue.js
  • 利用Java.util.UUID来生成唯一ID(用来做数据库主键好用)
    UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制...
    99+
    2024-04-02
  • 利用Python自制网页并实现一键自动生成探索性数据分析报告
    目录前言上传文件以及变量的筛选前言 今天小编带领大家用Python自制一个自动生成探索性数据分析报告这样的一个工具,大家只需要在浏览器中输入url便可以轻松的访问,如下所示: 第一...
    99+
    2024-04-02
  • 国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
    目录1. 页面布局2. 图片上传和展示3. 初始化画布4. 切换模板5. 输出图片这里用到的技术: HTML+ CSS+ JavaScript; download....
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作