【问题标题】:Cropping images in matlab for loop在matlab for循环中裁剪图像
【发布时间】:2014-03-27 11:18:56
【问题描述】:

我正在尝试在 matlab for 循环中剪切一些图像。但是,为了这样做,我面临一些问题。我的代码是上面的:

clear
clc

dir
dir 'D:\christos\DATABASE\animal';
listing = dir('D:\christos\DATABASE\animal');

[m n] =  size(listing);

for indx=3:m
 listing(indx).name
 A = imread(strcat( 'D:\christos\DATABASE\animal\' , listing(indx).name)); 
 [t1 t2] = size(A); imshow(A);
 A = imcrop(A, [ (1/3)*t1 (1/3)*t2  (2/3)*t1 (2/3)*t2 ] );
 %A =  imresize(A, [360, 280]);
 imwrite(A, strcat('D:\christos\DAt\animal\animal_',  int2str(indx-2) , '.jpg'));
end

在某些图像中,它不适用于 imcrop 行。除了图像已被读取并且大小为 t1 t2 的事实之外,我无法以我想要的方式裁剪它,结果我得到一个空的 A 图像。

【问题讨论】:

  • 那你想怎么裁剪呢?请您说明您想要的结果吗?
  • 是的,从 1/3x_max 到 2/3x_max 和 1/3y_max 2/3y_max。
  • 一般建议:为代码中的变量指定不同的名称。如果你写A=imcrop(A,...),你不知道空矩阵的问题是在读取图像时出现的,还是在裁剪时出现的......
  • 解决此问题的另一种方法是通过批处理脚本或 Matlab 使用命令行调用 ImageMagick。如果您对大量文件进行操作,它可能会更快。

标签: matlab image-processing crop


【解决方案1】:

也许有些是彩色图像,所以使用这个 -

[t1 t2 t3] = 大小(A);

并保持其余代码不变。

使用您的彩色图像原始代码,t2 将存储 - widthx3 而不是宽度本身。

【讨论】:

  • 没有实际的问题是我有相反的 t1 和 t2。
  • 是的,这是 MATLAB 存储尺寸信息的方式,有时可能会令人困惑。但无论如何,[t1 t2 t3] = size(A);是一种避免麻烦的更安全的方法。
猜你喜欢
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 2012-02-12
  • 2013-12-26
相关资源
最近更新 更多