Matlab之图片拼接
功能:可以自定义行列数拼接图片,拼接同时可以自定义对每张图片进行增(减)白边处理。
1.使用Matlab建立.m文件,具体如何建立见文章:
Matlab基础之.m文件创建及使用
2.我写了两份代码可供参考
代码一
%图片合并,可以实现将一组图片变为统一规格尺寸(默认第一张图的尺寸)
%可以自定义行列数拼合成一整张图片,若图片数不足行列乘积数则用等尺寸白色图片代替
%可以设置为每一张图片增加或减少白边
clear;
%设置行列数
row=3;%输入组合图片行数
column=3;%输入组合图片列数
%增白边
h1=10;%上下宽度
%去白边
c1=0;%上白边宽度
c2=0;%下白边宽度
c3=0;%左白边宽度
c4=0;%右白边宽度
%将图片录入数组
pictures=dir('*.jpg');%读取文件,录入结构体数组
num1=row*column;
num2=size(pictures,1);%读取图片数量
[high,wide,a]=size(imread(pictures(1).name));%读取第一张图片的尺寸
F=255*ones(high,wide,3);%创建空白图片F
for i=1:num1%将所有图片设置为与第一张图片的尺寸相同并导入四维矩阵pic
if i<=num2
pic(:,:,:,i)=imresize(imread(pictures(i).name),[high,wide]);
else%若图片数目小于行列乘积数则插入空白图片F
pic(:,:,:,i)=F;
end
end
%增加白边
if h1~=0
top1=255*ones(h1,wide,3,num1);
right1=255*ones(high+2*h1,h1,3,num1);
pic=cat(1,top1,pic,top1);
pic=cat(2,right1,pic,right1);
end
%去除白边
cut =[c1 c2 c3 c4]; %上下左右四边需要切边的尺寸
pic=pic(cut(1)+1:end-cut(2),cut(3)+1:end-cut(4),:,:);%开始裁剪
%合并图片
P=cell(row,column);
for i=1:num1
P{i}=pic(:,:,:,i);
end
C=cell2mat(P);
%再增加外白边
top2=255*ones(h1,(wide+2*h1-c3-c4)*column,3);
right2=255*ones((high+2*h1-c1-c2)*row+2*h1,h1,3);
C=cat(1,top2,C,top2);
C=cat(2,right2,C,right2);
%输出图像
C=uint8(C);
imwrite(C,[int2str(cputime) '.png']);
imshow(C)
代码二
%图片合并,可以实现将一组图片变为统一规格尺寸(默认第一张图的尺寸)
%可以自定义行列数拼合成一整张图片,若图片数不足行列乘积数则用等尺寸白色图片代替
%可以设置为每一张图片增加或减少白边
clear;
clc;
%设置行列数
row=3;%输入组合图片行数
column=3;%输入组合图片列数
%设置全局变量
global h1 high wide column row c1 c2 c3 c4
%增白边
h1=0;%白边宽度
%去白边
c1=0;%上白边宽度
c2=0;%下白边宽度
c3=0;%左白边宽度
c4=0;%右白边宽度
%将图片录入元胞数组
pictures=dir('*.jpg');%读取文件,录入结构体数组
num1=row*column;
num2=size(pictures,1);%读取图片数量
[high,wide,~]=size(imread(pictures(1).name));%读取第一张图片的尺寸
F=uint8(255*ones(high,wide,3));%创建空白图片F
P=cell(row,column);
for i=1:num1
if i<=num2
P{i}=imresize(imread(pictures(i).name),[high,wide]);
else%若图片数目小于行列乘积数则插入空白图片F
P{i}=F;
end
end
%增白边
if h1 ~= 0
for i=1:num1
P{i}=ADD1(P{i});
end
end
%去白边
if c1 ~= 0 | c2 ~= 0 | c3 ~= 0 | c4 ~= 0
for i=1:num1
P{i}=SUB(P{i});
end
end
%合并图片
C=cell2mat(P);
%再增加外白边
if h1 ~= 0
C=ADD2(C);
end
%输出图像
C=uint8(C);
imwrite(C,[int2str(cputime) '.png']);
imshow(C)
%下列自定义函数可以另建.m文件存放
%自定义增白边函数1
function a2=ADD1(a)
global h1 high wide
top1=255*ones(h1,wide,3);
right1=255*ones(high+2*h1,h1,3);
a1=cat(1,top1,a,top1);
a2=cat(2,right1,a1,right1);
end
%自定义增白边函数2
function b2=ADD2(b)
global h1 high wide column row c1 c2 c3 c4
top2=255*ones(h1,(wide+2*h1-c3-c4)*column,3);
right2=255*ones((high+2*h1-c1-c2)*row+2*h1,h1,3);
b1=cat(1,top2,b,top2);
b2=cat(2,right2,b1,right2);
end
%自定义去白边函数
function s=SUB(a)
global c1 c2 c3 c4
cut =[c1 c2 c3 c4]; %上下左右四边需要切边的尺寸
s=a(cut(1)+1:end-cut(2),cut(3)+1:end-cut(4),:,:);%开始裁剪
end
处理前

处理后 增白边0,减白边0

处理后 增白边10,减白边0

处理后 增白边0,减白边20

对于图片分割可见文章:Matlab之图片分割
智能推荐
图片按照张数纵向拼接
利用python对图片按照张数纵向拼接 这段代码可用于制作长图的拼接,例如网上下载的漫画长图,可拼接成很长的一幅图。要求图宽度一致,长度无要求 目录结构 文件夹下是图片文件,不限扩展名 具体代码 代码用的是PIL进行拼接,整体思路是根据合并张数,判断需要合并几次。再根据需要合并的图片文件总长度,在程序内部新建一张长为图片总长度,宽为图片宽度的长图,然后按一张张顺序黏贴到新建长图上。具体的方法说不太...
[Python & OpenCV]图片拼接程序
今天急需拼接几张差不多大小的图片,于是应用Opencv的一部分知识自己做了个程序: 可以随意拼接图片(横着、竖着、任意指定图片个数) 源码如下: 有想要打包exe程序的可以私信我。...
Docker-Compose部署nginx 和lnmp
Docker-Compose tomcat lnmp tomcat 使用Docker-Compose部署Nginx代理Tomcat集群,实现负载均衡 在这个目录下创建多个目录 切换到nginx目录修改nginx的主配置文件: [root@host1 compose]# cd nginx/ [root@host1 nginx]# vim default.conf 在末尾添加: 修改: 切换到tmca...
19-20年月度行业分析
Table of Contents 1 对各一级行业分析 2 对女装行业进行分析 对各一级行业分析 platform cid industry category themonth 销售额 访客 客群指数 行业简称 月 年 年月 0 天猫 50010368 ZIPPO/瑞士军刀/眼镜 太阳眼镜 2020-01-01 62484514.13 6663217 ...
Python数据分析入门
博客原文:https://ouduidui.cn/blog/detail?blogId=5fcddf5c61ae700fd80190db 基础知识 数据的分类 数值型数据 表示大小或多少的数据 例子:年龄、年购买量 数值型数据分析方法 最小值和最大值:查看这两个值的目的是为了能够确定一组数据的上界和下界。 **平均值:**平均值可以反映一组数据的综合水平。 **中位数:**中位数和平均数一样都是用...
猜你喜欢
1.Java基础入门 -(10)流程控制-循环嵌套结构
什么是循环嵌套? 循环嵌套就是在循环体内,包含一个完成的循环结构。(我们在if嵌套里讲过) 示例1:使用双重循环输出九九乘法表。 运行结果: 示例2:请打印直角三角形。 (这里用 . 代替 空格 方便演示) 运行结果: 示例3:请打印等腰三角形。 运行结果: 示例4:请输出1-100之间的素数。 质数又称为素数,是一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数...
AlertDialogDemo自定义使用方法
效果图如下: Dialog左边的按钮忘记支付密码写错了 已修复 图就不改了 功能需求点击重试 再次打开输入支付密码页面 点击忘记支付密码跳转密码设置页面 此Demo只为演示AlertDialog的使用方法以及资源属性设置 需要其他功能请留言说明 这是一个支付密码输入失败的弹框 自定义了基本属性 XMl布局dialog_common 圆角框的属性commen_dialog_bg Styledialo...
2020网鼎杯---Java文件上传wp
前言 一篇文章读懂Java代码审计之XXE看过我这篇博客应该不难,没看过建议在看看。 题解 下载了所有的class发现需要上传xlsx poi 开头必须是execl 新建execl -1.xlsx文件,修改后缀名execl -1.xlsx.zip解压。 修改[Content-Types].xml 重新打包成excel-1.xlsx,文件名一定不能错。 在服务器上新建一个evil.etd文件。 然后...
关于串口数据接收出错问的问题(RS232、RS422、UART)
这两天调试串口驱动,串口驱动应该是很简单的啊,但是发现数据接收的时候,总是偶尔会出现错误,经过不断的排查,终于找到了问题的关键所在。 一段串口的verilog代码如下: 如果采样上面的方式对串口数据进行接收,就会发现串口数据总是偶尔出现个别的数据接收出错。通过ila抓波形,发现有如下图一的异常情况出现,这个时候uart_rx_i已经拉低了,但是却没有检测到下降沿,就会导致数据接收出错,这是由于亚稳...
入侵别人电脑后你必须要会的Linux与window系统用命令行下载网络资源的15种方式
我花了一天时间精心整理本文,有百度的经典方案,有老师的精心传授,也有自己的实践总结,如果觉得有用就转发收藏吧️别忘点赞哦这样可以帮助到更多的人 window系统常见下载方式 FTP脚本 vbs脚本 bitsadmin命令 $client命令 Linux系统常见下载方式 wget curl lynx fetch Axel aria2 youtube-dl 双方均可用 links links2 pyt...
