日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用MATLAB画圣诞树的源代码

發布時間:2024/3/12 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用MATLAB画圣诞树的源代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

女神要我給她畫圣誕樹?高情商這樣畫!

畫圣誕樹的代碼都在這里啰!由于期末時間緊張,這里就不對代碼做詳細解釋了(源代碼有一定的注釋)!請見諒!

第一個是水彩畫濾鏡:

參考了(圖像濾鏡算法——水彩濾鏡、漫畫濾鏡_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 %%不計算最外層cnt_level=zeros(colorSize+1,1); %統計每個亮度等級出現多少次temp_color=zeros(colorSize+1,3); %每個亮度等級對應的顏色 %%每個像素及其周圍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,:);%%%原結果有點生硬,濾波平滑一下 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成倍數 v=2*nfSize; vy=2; %%學花數量 num=50; %每幀時間 dt = 1/10; %%隨機生成位置 [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的倍數m_choice=floor(ht/nfSize); %% 可以取的倍數范圍 n_choice=floor(wd/nfSize); %%ii=randperm(m_choice,num)*nfSize; %%隨機 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) %參數依次為原圖,雪花大小,初始位置ij,速度,每幀時間,輸出路徑 ht=size(src,1); wd=size(src,2); fs=floor(ht/v); %%幀數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是每一幀的移動量,即速度,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是每一幀的移動量,即速度,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);%%添加球 %綠、藍、黃、紅 cmap=[0 250 0;0,0,255;255,255,0;255 0 0]/255;%個數 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];%%%%隨機確定球的顏色,按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; %不要坐標軸 endfunction addCircle(center,r,type,cmap,alpha) %畫圓的函數 %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; %不要坐標軸 end

結果分別如下:

(原圖:)

?(水彩畫濾鏡后的圖片:)

?(加入雪花效果:)

(GIF過大不能添加,只能添加一個截圖:)

(直接畫一個圣誕樹:)

總結

以上是生活随笔為你收集整理的用MATLAB画圣诞树的源代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。