您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“怎么用MATLAB做一個完美的照片墻”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“怎么用MATLAB做一個完美的照片墻”這篇文章吧。
-- 原理 --
其實,如果前面分割圖片的原理理解了的話,本期中拼接圖片的原理不用說也能想的到。
照片墻不就是一個由許多小圖片構成的大圖片么,也就是說照片墻實際上就是由許多小矩陣構成的大矩陣。豁然開朗了把,只要用循環把這些矩陣拼接起來就能實現。(不過值得注意的是,一般都是rgb圖像,如果直接以原來的尺寸拼接,會出現矩陣太大,MATLAB就直接不干了,所以如果圖片比較多的話需要先采用imresize函數縮小一下)
-- 源碼 --
clc
clear
close all
warning off
%% 我把保存圖片的文件夾temp移到當前路徑下了,里面有16張圖片
Pics = struct2cell(dir('temp \*jpg'));%讀取文件夾中的圖片
Pics = Pics(1,:);%獲取圖片名
OnePic = imread(['temp\' Pics{1}]);%讀入第一張圖片
OnePic = imresize(OnePic,0.5);%原圖比較大,合成成照片墻后,照片墻太大,所以縮小一下
m = size(OnePic,1);%獲取第一張圖片的像素行數
n = size(OnePic,2);%獲取第一張圖片的像素列數
%% temp中有16張圖片
%這里設置為4x4的照片墻
row = 4;%4行
column = 4;%4列
fullPic = uint8(zeros(m*row,n*column,3));%初始化照片墻
k = 1;%初始化計數器,用于記錄第幾張圖片
for i = 0:row-1
for j = 0:column-1
I_Temp = imread(['temp\' , Pics{k}]);%讀入照片
I_Temp = imresize(I_Temp,[m,n]);%把所有照片大小設置為第一張照片的大小
fullPic(i*m+1:(i+1)*m , j*n+1:(j+1)*n , :) = I_Temp;%拼接
k = k+1;%更新計數器
imshow(fullPic)%顯示當前的照片墻
drawnow%刷新屏幕
end
end
imwrite(fullPic,'PicWall.jpg')%保存圖片嘍
由于之前的分割圖片我們是要保存多張圖片,所以采用四維數組,第四維是照片的張數。而這里我們最后只要保存一張圖片所以采用三維數組保存即可
-- imresize函數的部分用法 --
這里我還是直接粘貼help的內容吧,大家一塊學學英語。
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.(這個非限定從別管它)
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.
解釋一下吧:第一個用法中,SCALE是把圖像矩陣A放大的倍數,比如縮小0.5倍就寫0.5,就行。
第二個用法用,[NUMROWS NUMCOLS]放的是resize后的圖片有NUMROWS行像素和NUMCOLS列像素。
程序中采用了第一種方法。
-- 效果 --
我電腦有點卡,所以下面的GIF開頭有點慢。(主要還是照片墻的矩陣有點大)
以上是“怎么用MATLAB做一個完美的照片墻”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。