matlab处理:批处理图像分块
有一个图像分块的代码,可以直接将一幅图像分为5*5的小块,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | %[FileName,PathName] = uigetfile('*.*','Select the image'); Im= imread ( 'Bicubic flowers.bmp' ); imshow(Im) hold on L = size (Im); height=5; width=5; max_row = floor (L(1)/height); %实验图片为800*1280,则max_row=5,max_col=8 max_col = floor (L(2)/width); seg = cell (max_row,max_col); %分块 for row = 1:max_row for col = 1:max_col seg(row,col)= {Im((row-1)*height+1:row*height,(col-1)*width+1:col*width,:)}; end end for i =1:max_row*max_col imwrite (seg{ i }, strcat ( 'm' , int2str ( i ), '.bmp' )); %把第i帧的图片写为'mi.bmp'保存 end %画出分块的边界 for row = 1:max_row for col = 1:max_col rectangle ( 'Position' ,[160*(col-1),160*(row-1),160,160],... 'LineWidth' ,2, 'LineStyle' , '-' , 'EdgeColor' , 'r' ); end end hold off |
怎么直接把一个文件夹里的所有图片都按这个分块方法进行分类并保存结果呢?开始我想的是直接用一个循环结构就可以了,但是后来发现最后的结果不对,好几张图片分类最后的小图片数量不够,试了几次才发现是命名相同的问题,循环里最后保存的每个大图的小图片的名字是一样的,所以后面的把前面产生的小图像给覆盖掉了,然后就想办法,每个循环都建立一个文件夹,来分开保存每个大图的小图片,这样问题就解决了。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | srcDir= uigetdir ( 'Choose source directory.' ); %获得选择的文件夹 cd (srcDir); %mkdir('.\image') allnames= struct2cell ( dir ( '*.bmp' )); %只处理8位的bmp文件 [k,len]= size (allnames); %获得bmp文件的个数 for ii=1:len %逐次取出文件 mkdir (['.\ image \', int2str (ii)]); name=allnames{1,ii}; Im= imread (name); %读取文件 %然后在此处添加你的图像处理程序即可 L = size (Im); height=5; width=5; max_row = floor (L(1)/height); %实验图片为800*1280,则max_row=5,max_col=8 max_col = floor (L(2)/width); seg = cell (max_row,max_col); %分块 for row = 1:max_row for col = 1:max_col seg(row,col)= {Im((row-1)*height+1:row*height,(col-1)*width+1:col*width,:)}; end end for i =1:max_row*max_col imwrite (seg{ i }, strcat ( 'image\',int2str(ii),' \ ',' m ',int2str(i),' .bmp ')); %把第i帧的图片写为' mi.bmp'保存 end %画出分块的边界 for row = 1:max_row for col = 1:max_col rectangle ( 'Position' ,[160*(col-1),160*(row-1),160,160],... 'LineWidth' ,2, 'LineStyle' , '-' , 'EdgeColor' , 'r' ); end end end |
最后,这个代码的作用是批量处理一个文件夹里的图像(进行图像分块),可以将分块结果保存到每一个相应文件中如下:
(三张原图批量分块) 分块结果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具