欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Matlab一鍵生成工地海報(bào)特效

 更新時(shí)間:2022年03月29日 16:27:23   作者:slandarer  
這篇文章主要介紹了如何利用Matlab制作出工地海報(bào)的特效,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下

1.使用效果

這篇的本質(zhì)還是扭曲置換,其實(shí)看過(guò)前面幾篇文章的應(yīng)該都能猜出是怎樣做到的,下面開(kāi)始講解:

2.圖片準(zhǔn)備和導(dǎo)入

首先m文件所在文件夾內(nèi)應(yīng)該有如下兩張圖:

此外還需要一張近似方形的圖片也要一起放在文件夾中,之后通過(guò)以下代碼導(dǎo)入和初步處理圖片(選擇幕布部分和去色代碼,可左右滑動(dòng)):

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

screenRange=imread('screenRange.jpg');    % 幕布范圍圖(用來(lái)扣幕布邊緣細(xì)節(jié))
screenRange=rgb2gray(screenRange);

forePic=imread('2048.jpg');               % 要做成海報(bào)的圖片

3.圖像傾斜

我們可以看出幕布是有些傾斜的,我們?yōu)榱俗寛D片和幕布更加貼近,我們將圖片進(jìn)行傾斜處理并將其調(diào)整至與幕布區(qū)域相似的大?。?/p>

% 前景圖片變形=============================================================
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.緣修整(摳圖)

上方正交疊底后,幕布外面還是灰色,而且幕布內(nèi)容部分超出幕布范圍,我們可以用幕布范圍圖修整幕布:

% 邊緣修整=================================================================
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.背景圖像替換

% 將背景圖幕布區(qū)域換為新圖=================================================
bkgPic(190:555,(190:555)+160,:)=screenPic;
imshow(bkgPic)

8.完整代碼

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

screenRange=imread('screenRange.jpg');    % 幕布范圍圖(用來(lái)扣幕布邊緣細(xì)節(jié))
screenRange=rgb2gray(screenRange);

forePic=imread('2048.jpg');               % 要做成海報(bào)的圖片

% 前景圖片變形=============================================================
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)

% 將背景圖幕布區(qū)域換為新圖=================================================
bkgPic(190:555,(190:555)+160,:)=screenPic;
imshow(bkgPic)
end

以上就是利用Matlab一鍵生成工地海報(bào)特效的詳細(xì)內(nèi)容,更多關(guān)于Matlab海報(bào)特效的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論