批处理
2015年6月23日更新:见新图像批处理App(添加到R2015a)和我的关于它的博客文章.
几个月前,我正在处理一堆我在家里拍的照片。我有大约40个,我需要以同样的方式裁剪和调整它们的大小。当然,我写了一个MATLAB脚本来做这件事。
这段经历提醒我,客户有时会问“如何使用图像处理工具箱对图像进行批处理?”实际上,这不是一个工具箱问题;这是一个MATLAB问题。换句话说,批处理的基本MATLAB技术适用于任何领域,而不仅仅是图像处理。
内容
步骤1:获取一个文件名列表
如果你使用dir函数使用输出参数,则返回包含文件名的结构数组,以及关于每个文件的其他信息。
假设我想处理所有以.jpg结尾的文件:
文件= dir(‘* . jpg”)
Files = 42x1带字段的结构数组:name date bytes isdir
的文件Struct数组有42个元素,表示当前目录中有42个匹配“*.jpg”的文件。让我们来看看其中几个文件的详细信息。
文件(1)
ans = name: 'IMG_0175.jpg' date: '12-Feb-2006 10:49:30' bytes: 962477 isdir: 0
文件(结束)
ans = name: 'IMG_0216.jpg' date: '12-Feb-2006 11:09:10' bytes: 1004842 isdir: 0
步骤2:确定每个文件要遵循的处理步骤
每个文件都有四个基本步骤:
1.从文件中读入数据。
2.处理数据。
3.构造输出文件名。
4.写出处理过的数据。
下面是我的读取和处理步骤:
RGB = imread(“IMG_0175.jpg”);% or RGB = imread(files(1).name);RGB = RGB (1:19 00,520:2000,:);RGB = imresize(RGB, 0.2,“双三次的”);
在构造输出文件名时,有许多选项需要考虑。在我的例子中,我想使用相同的名称,但在子文件夹中:
output t_name = [“裁剪\”文件(1). name]%如果你愿意,可以使用fullfile代替%多平台可移植性
output_name =裁剪\IMG_0175.jpg
下面是输出名称构造的另一个示例。如果您想更改图像格式,您可以使用类似的方法。
Input_name = files(1).name
input_name = IMG_0175.jpg
[path, name, extension] = fileparts(input_name)
path = " name = IMG_0175 extension = .jpg
Output_name = fullfile(path, [name . name .“.tif”])
output_name = IMG_0175.tif
步骤3:将所有内容放在for循环中
以下是我完整的批处理循环:
文件= dir(‘* . jpg”);为K = 1:数字(文件)RGB = imread(文件(K).name);RGB = RGB (1:19 00,520:2000,:);RGB = imresize(RGB, 0.2,“双三次的”);imwrite (rgb, [“裁剪\”文件(k) . name]);结束
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。