用MATLAB画圣诞树的源代码
生活随笔
收集整理的這篇文章主要介紹了
用MATLAB画圣诞树的源代码
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
女神要我給她畫圣誕樹?高情商這樣畫!
畫圣誕樹的代碼都在這里啰!由于期末時(shí)間緊張,這里就不對代碼做詳細(xì)解釋了(源代碼有一定的注釋)!請見諒!
第一個(gè)是水彩畫濾鏡:
參考了(圖像濾鏡算法——水彩濾鏡、漫畫濾鏡_iostream__的博客-CSDN博客_濾鏡算法)這篇文章
close;clear;clc;%讀取圖片 src=imread("src\6.jpg"); imshow(src);img_get=wcPainter(src,10,21,5,1);imshow(img_get); imwrite(img_get,"6t-21.jpg");function img_get=wcPainter(src,colorSize,penSize,filterSzie,parm)ht=size(src,1); %%高 wt=size(src,2); %%寬img_temp=src; %輸出color_level(:,:)=round(colorSize*(double(src(:,:,1))+double(src(:,:,2))+double(src(:,:,3)))/(3*255));%%原圖像的色彩等級rPen=(penSize-1)/2; %%畫筆半徑for i=1+rPen:ht-rPenfor j=1+rPen:wt-rPen %%不計(jì)算最外層cnt_level=zeros(colorSize+1,1); %統(tǒng)計(jì)每個(gè)亮度等級出現(xiàn)多少次temp_color=zeros(colorSize+1,3); %每個(gè)亮度等級對應(yīng)的顏色 %%每個(gè)像素及其周圍for m=-rPen:rPenfor n=-rPen:rPencnt_level(color_level(i+m,j+n)+1,1)=cnt_level(color_level(i+m,j+n)+1,1)+1;temp_color(color_level(i+m,j+n)+1,:)=round((temp_color(color_level(i+m,j+n)+1,:)+double([src(i+m,j+n,1),src(i+m,j+n,2),src(i+m,j+n,3)]))/2); %與之前的取平均 endend[~,index_max]=max(cnt_level);img_temp(i+m,j+n,1)=temp_color(index_max,1);img_temp(i+m,j+n,2)=temp_color(index_max,2);img_temp(i+m,j+n,3)=temp_color(index_max,3);end endimg_get0=img_temp(1+rPen:ht-rPen,1+rPen:wt-rPen,:);%%%原結(jié)果有點(diǎn)生硬,濾波平滑一下 if(filterSzie>0) %核大于0才濾波 gw=fspecial('gaussian',[filterSzie,filterSzie],parm); img_get=imfilter(img_get0,gw,'replicate'); else img_get= img_get0; endend下面是添加雪花效果的濾鏡:
close;clear;clc;%讀取圖片 src=imread("out\6t-21.jpg");%輸出路徑 outPath='6-snowFlake-21.gif';ht=size(src,1); wd=size(src,2);%雪花大小 nfSize=6;%%速度需要和nfsize成倍數(shù) v=2*nfSize; vy=2; %%學(xué)花數(shù)量 num=50; %每幀時(shí)間 dt = 1/10; %%隨機(jī)生成位置 [ii,jj]=getInitialPos(ht,wd,nfSize,num);makeGif(src,nfSize,ii,jj,v,vy,dt,outPath);function [ii,jj]=getInitialPos(ht,wd,nfSize,num) %獲取初始位置 %%位置也是nfsize的倍數(shù)m_choice=floor(ht/nfSize); %% 可以取的倍數(shù)范圍 n_choice=floor(wd/nfSize); %%ii=randperm(m_choice,num)*nfSize; %%隨機(jī) jj=randperm(n_choice,num)*nfSize;ii=ii(ii>nfSize&ii<m_choice*nfSize); %%注意不能越界 jj=jj(jj>nfSize&jj<n_choice*nfSize);%%列向量 ii=ii'; jj=jj';endfunction makeGif(src,nfSize,ii,jj,v,vy,dt,outPath) %參數(shù)依次為原圖,雪花大小,初始位置ij,速度,每幀時(shí)間,輸出路徑 ht=size(src,1); wd=size(src,2); fs=floor(ht/v); %%幀數(shù)temp=addMultiSnowFlake(src,ii,jj,nfSize); [tempI,mapI] = rgb2ind(temp,128); imwrite(tempI,mapI,outPath,'gif','LoopCount',Inf,'DelayTime',dt); for k = 2:fsii=MoveSnowFlake(ii,v,ht,nfSize);%[ii,jj]=MoveSnowFlake2(ii,jj,v,vy,ht,wd,nfSize);temp=addMultiSnowFlake(src,ii,jj,nfSize);[tempI,mapI] = rgb2ind(temp,128);imwrite(tempI,mapI,outPath,'gif','WriteMode','append','DelayTime',dt); endendfunction [ii_move,jj_move]=MoveSnowFlake2(ii,jj,v,vy,ht,wd,nfSize) %%v是每一幀的移動(dòng)量,即速度,ht是邊界長 ii_move=ii+v; ii_move(ii_move>ht-nfSize)=nfSize*2; %檢查越界的,越界的就從上面冒出來num=size(jj,1); jj_move=jj+round(unifrnd (-vy,vy,num,1)); jj_move(jj_move>wd-nfSize)=nfSize*2; jj_move(jj_move<nfSize)=wd-nfSize*2; endfunction ii_move=MoveSnowFlake(ii,v,ht,nfSize) %%v是每一幀的移動(dòng)量,即速度,ht是邊界長 ii_move=ii+v; ii_move(ii_move>=ht-nfSize)=nfSize*2; %檢查越界的,越界的就從上面冒出來end%%%多片雪花 function img_get=addMultiSnowFlake(src,ii,jj,nfSize) num_fk=size(ii,1); img_get=src;for nt=1:num_fkfor nf=-nfSize:nfSize img_get(ii(nt)+nf,jj(nt),:)=255; img_get(ii(nt),jj(nt)+nf,:)=255;img_get(ii(nt)+nf,jj(nt)+nf,:)=255;img_get(ii(nt)-nf,jj(nt)+nf,:)=255; end endend%%單片雪花 function img_get=addOneSnowFlake(src,i,j,nfSize) img_get=src;for nf=-nfSize:nfSize img_get(i+nf,j,:)=255; img_get(i,j+nf,:)=255;img_get(i+nf,j+nf,:)=255;img_get(i-nf,j+nf,:)=255; endend最后是直接畫一棵圣誕樹的代碼:
close;clear;clc;%%背景 % figure; Background(150,320); hold on; %%輪廓 % plot([-100,100],[0,0],'g','LineWidth',2); % plot([0,-100],[300,0],'g','LineWidth',2); % plot([0,100],[300,0],'g','LineWidth',2); %%添加線 [xs,ys]=getLines(14); plot(xs,ys,'g','LineWidth',1);%%添加球 %綠、藍(lán)、黃、紅 cmap=[0 250 0;0,0,255;255,255,0;255 0 0]/255;%個(gè)數(shù) num=200; %半徑 %r=6; alpha=0.8;for it=1:numx_c=round(unifrnd(-100,100));if(x_c<=0)ymax=round(x_c*3+300);elseymax=round(x_c*-3+300);endy_c=round(unifrnd(0,ymax)); %不能越界center=[x_c,y_c];%%%%隨機(jī)確定球的顏色,按4321比例typ_chose=round(unifrnd(0,100));if(typ_chose<=40)tp=3;elseif(typ_chose<=70)tp=4;elseif(typ_chose<=90)tp=2;elsetp=1;endr=unifrnd(4,6);addCircle(center,r,tp,cmap,alpha)endf=getframe(gcf); imwrite(f.cdata,'test8.jpg');function [xs,ys]=getLines(n) xs=zeros(n,1); ys=zeros(n,1); xs(1)=-100; ys(1)=0; for i=2:nif(xs(i-1)<0)xs(i)=round((900-3*ys(i-1)+xs(i-1))/10);ys(i)=300-3*xs(i);elsexs(i)=round((3*ys(i-1)+xs(i-1)-900)/10);ys(i)=300+3*xs(i);end endendfunction Background(x,y) X=[-x,-x,x,x]; Y=[y,-20,-20,y]; patch(X, Y,[0 0 0], 'facealpha', 1, 'edgecolor', 'none'); axis equal; axis off; %不要坐標(biāo)軸 endfunction addCircle(center,r,type,cmap,alpha) %畫圓的函數(shù) %alpha是透明度 t = 0 : .1 : 2 * pi; x = r * cos(t) + center(1); y = r * sin(t) + center(2); patch(x, y,cmap(type,:), 'facealpha', alpha, 'edgecolor', 'none'); axis equal; axis off; %不要坐標(biāo)軸 end結(jié)果分別如下:
(原圖:)
?(水彩畫濾鏡后的圖片:)
?(加入雪花效果:)
(GIF過大不能添加,只能添加一個(gè)截圖:)
(直接畫一個(gè)圣誕樹:)
總結(jié)
以上是生活随笔為你收集整理的用MATLAB画圣诞树的源代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 监控系统cat安装和配置demo ubu
- 下一篇: jenkins执行脚本不退出