如何一键把多张图片批量裁剪、排列、整合成一张图片? | 您所在的位置:网站首页 › 闹鬼图片知乎 › 如何一键把多张图片批量裁剪、排列、整合成一张图片? |
很多时候,我们需要把好几张曲线图拼成一副大图,制作出类似于这样的图片: 上面这个图看起来很牛的样子,它是由四张如下这样的小曲线图拼合而成: 这时候,有童鞋举手问了:不好意思打断一下,问下上面这种曲线图是用什么软件画出来的? 这位童鞋,你跑题了哈,画图软件是Origin,是发SCI论文的标配画图软件,具体可以看这里: 你一定要知道的十款主流画图软件,淡定的工作从画出高品格图片开始 那么,现在如果想要把这四个小图拼成一个2*2的阵列怎么办? 这时候,另外一个童鞋抢答了:我知道,可以用Visio软件,把上面四个图片导进去,然后拖动鼠标对齐就可以。 还有第三个童鞋马上接着说:对啊对啊,这问题不难,点点鼠标,体力活而已,小Case了啦。 可是如果图片是这样的呢: 需要手动导入12张图片,然后排列合成。 又比如,如果是这样的呢: 需要手动导入18张图片,然后排列合成。 如果再多点图呢?赶紧在实验室看门大爷锁门之前,跑去旁边卖麻辣烫的小店屯好泡面,准备今天晚上通宵吧少年! 况且,可能还存在另外一个闹心的问题:每张小图片在拼合之前是有白边的。比如下面这个样子: 如果直接把这几个图片手动拼起来,每两个小图之间的距离隔开很远,比较难看,就像下面这样: 因此,在排列图片之前,还需要对每张曲线图先裁剪白边,然后再把裁剪尺寸之后的图片拼起来。 显然,这时采用手动裁剪图片和拼图,是不划算的: (1) 纯体力劳动,很没有成就感; (2) 浪费时间,真想快点弄完去刷抖音啊。 有没有什么办法可以一键把多张图片批量裁剪、排列、整合成一张图片? 看来这次是真的要请Matlab出马了。 1. 源代码及解释 废话不多说,先上Matlab代码,不想看代码可以直接跳到下一节使用方法。 clear; figurestocut=dir('*.bmp'); %读取文件夹里面所有bmp图片 figurenum=size(figurestocut,1); %自动获取图片的总数量 fori=1:figurenum %将所有图片都存到一个四维数组 figures(:,:,:,i)=imread(figurestocut(i).name,'bmp'); end cut =[100 100 100 100]; 上下左右四边需要切边的尺寸 figures=figures(cut(1)+1:end-cut(2),cut(3)+1:end-cut(4),:,:);%开始裁剪 outfigure=[]; fori=1:figurenum %将裁剪过后的图片重新存在一起 outfigure = [outfigure; figures(:,:,:,i)]; end image(uint8(outfigure)); axis equal; axis off; imwrite(outfigure,'outfigure.bmp','bmp'); %输出图片 大概原理是:每张图片其实是由很多个像素组成,每个像素点是由红色、绿色和蓝色这三种颜色不同比例混合而成。 所以其实每个图片是一个三维数组,三个维度依次存着红色、绿色和蓝色的数值,范围在0~255。 然后这个脚本就是把所有图片先读入到一个数组,裁剪就是提取数组中间的部分,拼合就是把几个图片的数组拼合成一个大数组。 2. 使用方法 使用方法如下: 第一步:把上面这些代码存到一个记事本里,起个好听的名字,比如叫getfigure.m; 第二步:准备好待拼图的N张图片,每张图均需要为bmp格式; 第三步:将上面这些bmp图片和getfigure.m拷到一个文件夹; 第四步:打开getfigure.m,修改需要裁剪白边的尺寸,就是这一行代码: cut =[100 100 100 100]; 上下左右四边需要切边的尺寸 比如上、下、左、右分别想裁剪150、200、250、300,那就改成 cut =[150 200 250 300]; 上下左右四边需要切边的尺寸 具体需要裁剪多少尺寸,可以测试几次就能得到。 第五步:在matlab主窗口输入getfigure,好了,图片自动裁剪、拼合成功了。 3. 横排竖排 有童鞋看出来了,上面这个代码只能把所有图片横排: 如果想竖排怎么办? 把 改成 即可。(分号改为逗号就可以竖排了) 如果想把图片排列成2*2或者2*3的阵列怎么办? 先运行横排的程序把四张排成两张,再运行竖排的程序把这两张排成最终的一张即可。 看,只需要15行代码就可以解决熬夜的问题。 已经买好泡面的同学可以回宿舍悠闲地用锅煮着吃了,下次记得多煮点叫我一起! |
CopyRight 2018-2019 实验室设备网 版权所有 |