2014-02-25 162 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