溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么用MATLAB做一個(gè)完美的照片墻

發(fā)布時(shí)間:2021-12-30 17:10:04 來源:億速云 閱讀:139 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要為大家展示了“怎么用MATLAB做一個(gè)完美的照片墻”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“怎么用MATLAB做一個(gè)完美的照片墻”這篇文章吧。

-- 原理 --

其實(shí),如果前面分割圖片的原理理解了的話,本期中拼接圖片的原理不用說也能想的到。

照片墻不就是一個(gè)由許多小圖片構(gòu)成的大圖片么,也就是說照片墻實(shí)際上就是由許多小矩陣構(gòu)成的大矩陣?;砣婚_朗了把,只要用循環(huán)把這些矩陣拼接起來就能實(shí)現(xiàn)。(不過值得注意的是,一般都是rgb圖像,如果直接以原來的尺寸拼接,會出現(xiàn)矩陣太大,MATLAB就直接不干了,所以如果圖片比較多的話需要先采用imresize函數(shù)縮小一下

怎么用MATLAB做一個(gè)完美的照片墻

-- 源碼 --

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é)英語。

 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倍就寫0.5,就行。

第二個(gè)用法用,[NUMROWS NUMCOLS]放的是resize后的圖片有NUMROWS行像素和NUMCOLS列像素。

程序中采用了第一種方法。

-- 效果 --

我電腦有點(diǎn)卡,所以下面的GIF開頭有點(diǎn)慢。(主要還是照片墻的矩陣有點(diǎn)大)

怎么用MATLAB做一個(gè)完美的照片墻

怎么用MATLAB做一個(gè)完美的照片墻

以上是“怎么用MATLAB做一個(gè)完美的照片墻”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI