十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
這篇文章主要為大家展示了“怎么用MATLAB做一個(gè)完美的照片墻”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“怎么用MATLAB做一個(gè)完美的照片墻”這篇文章吧。
創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括尖草坪網(wǎng)站建設(shè)、尖草坪網(wǎng)站制作、尖草坪網(wǎng)頁(yè)制作以及尖草坪網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,尖草坪網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到尖草坪省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!
-- 原理 --
其實(shí),如果前面分割圖片的原理理解了的話(huà),本期中拼接圖片的原理不用說(shuō)也能想的到。
照片墻不就是一個(gè)由許多小圖片構(gòu)成的大圖片么,也就是說(shuō)照片墻實(shí)際上就是由許多小矩陣構(gòu)成的大矩陣?;砣婚_(kāi)朗了把,只要用循環(huán)把這些矩陣拼接起來(lái)就能實(shí)現(xiàn)。(不過(guò)值得注意的是,一般都是rgb圖像,如果直接以原來(lái)的尺寸拼接,會(huì)出現(xiàn)矩陣太大,MATLAB就直接不干了,所以如果圖片比較多的話(huà)需要先采用imresize函數(shù)縮小一下)
-- 源碼 --
clc
clear
close all
warning off
%% 我把保存圖片的文件夾temp移到當(dāng)前路徑下了,里面有16張圖片
Pics = struct2cell(dir('temp \*jpg'));%讀取文件夾中的圖片
Pics = Pics(1,:);%獲取圖片名
OnePic = imread(['temp\' Pics{1}]);%讀入第一張圖片
OnePic = imresize(OnePic,0.5);%原圖比較大,合成成照片墻后,照片墻太大,所以縮小一下
m = size(OnePic,1);%獲取第一張圖片的像素行數(shù)
n = size(OnePic,2);%獲取第一張圖片的像素列數(shù)
%% temp中有16張圖片
%這里設(shè)置為4x4的照片墻
row = 4;%4行
column = 4;%4列
fullPic = uint8(zeros(m*row,n*column,3));%初始化照片墻
k = 1;%初始化計(jì)數(shù)器,用于記錄第幾張圖片
for i = 0:row-1
for j = 0:column-1
I_Temp = imread(['temp\' , Pics{k}]);%讀入照片
I_Temp = imresize(I_Temp,[m,n]);%把所有照片大小設(shè)置為第一張照片的大小
fullPic(i*m+1:(i+1)*m , j*n+1:(j+1)*n , :) = I_Temp;%拼接
k = k+1;%更新計(jì)數(shù)器
imshow(fullPic)%顯示當(dāng)前的照片墻
drawnow%刷新屏幕
end
end
imwrite(fullPic,'PicWall.jpg')%保存圖片嘍
由于之前的分割圖片我們是要保存多張圖片,所以采用四維數(shù)組,第四維是照片的張數(shù)。而這里我們最后只要保存一張圖片所以采用三維數(shù)組保存即可
-- imresize函數(shù)的部分用法 --
這里我還是直接粘貼help的內(nèi)容吧,大家一塊學(xué)學(xué)英語(yǔ)。
imresize: Resize image.
B = imresize(A, SCALE) returns an image that is SCALE times the
size of A, which is a grayscale, RGB, or binary image.(這個(gè)非限定從別管它)
B = imresize(A, [NUMROWS NUMCOLS]) resizes the image so that it has the specified number of rows and columns. Either NUMROWS or NUMCOLS may be NaN, in which case imresize computes the number of rows or columns automatically in order to preserve the image aspect ratio.
解釋一下吧:第一個(gè)用法中,SCALE是把圖像矩陣A放大的倍數(shù),比如縮小0.5倍就寫(xiě)0.5,就行。
第二個(gè)用法用,[NUMROWS NUMCOLS]放的是resize后的圖片有NUMROWS行像素和NUMCOLS列像素。
程序中采用了第一種方法。
-- 效果 --
我電腦有點(diǎn)卡,所以下面的GIF開(kāi)頭有點(diǎn)慢。(主要還是照片墻的矩陣有點(diǎn)大)
以上是“怎么用MATLAB做一個(gè)完美的照片墻”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!