2014-02-25 115 views
0

我想在matlab for循环中剪切一些图像。但是,为了这样做,我正面临一些问题。我的代码是上面的:在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图像。

+0

然后你想裁剪它的方式是什么?你能说出你想要的结果吗? – kkuilla

+0

是从1/3x_max到2/3x_max和1/3y_max 2/3y_max。 –

+0

一般建议:给代码中的变量赋予不同的名称。如果您编写'A = imcrop(A,...)',则无法知道在读取图像或裁剪图像时空矩阵的问题是否合适...... – Adiel

回答

1

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

[T1 T2 T3] =尺寸(A);

并保留其余的代码。

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

+0

没有问题是我在t1和t2的对面。 –

+0

是的,这是MATLAB存储大小信息的方式,有时会令人困惑。但无论如何,[t1 t2 t3] = size(A);是一种避免麻烦的更安全的方法。 – Divakar