怎么用MATLAB做一个完美的照片墙-成都创新互联网站建设

关于创新互联

多方位宣传企业产品与服务 突出企业形象

公司简介 公司的服务 荣誉资质 新闻动态 联系我们

怎么用MATLAB做一个完美的照片墙

这篇文章主要为大家展示了“怎么用MATLAB做一个完美的照片墙”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用MATLAB做一个完美的照片墙”这篇文章吧。

创新互联公司服务项目包括尖草坪网站建设、尖草坪网站制作、尖草坪网页制作以及尖草坪网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,尖草坪网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到尖草坪省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

-- 原理 --

其实,如果前面分割图片的原理理解了的话,本期中拼接图片的原理不用说也能想的到。

照片墙不就是一个由许多小图片构成的大图片么,也就是说照片墙实际上就是由许多小矩阵构成的大矩阵。豁然开朗了把,只要用循环把这些矩阵拼接起来就能实现。(不过值得注意的是,一般都是rgb图像,如果直接以原来的尺寸拼接,会出现矩阵太大,MATLAB就直接不干了,所以如果图片比较多的话需要先采用imresize函数缩小一下

怎么用MATLAB做一个完美的照片墙

-- 源码 --

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做一个完美的照片墙

怎么用MATLAB做一个完美的照片墙

以上是“怎么用MATLAB做一个完美的照片墙”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


本文名称:怎么用MATLAB做一个完美的照片墙
文章源于:http://kswsj.cn/article/gdgcgg.html

其他资讯