2016-03-22 2 views
0

Ich möchte imcrop verwenden, um ein Bild in zwei Hälften zu teilen. Das Ergebnis ist jedoch nicht genau die Hälfte des Bildes. Was ist das Problem?Verwenden Sie imcrop, um ein Bild in zwei Hälften zu teilen

Der Code ist hier:

I=imread('example.png'); 
[x,y]=size(I); 
disp(x); 
disp(y); 
A = imcrop(I, [0 0 x y/2]); 
[x1,y1]=size(A); 
imshow(A); 

kann Jedes Bild als Beispiel verwendet werden.

+1

Ich nehme an, das passiert nur für Bilder mit ungeraden Breiten, ist das richtig? Sie können ein Pixel nicht in Hälften teilen. – hbaderts

+0

Danke! Ich habe gelernt, dass es daran liegt, dass in '[x, y] = size (I)' der Rückgabewert von size() 3 Dimensionen hat, aber ich 2 Dimensionen [x, y] zu erhalten, also den Wert y ist falsch. –

Antwort

0

Wenn Sie nur zwei Ausgaben von size anfordern, gibt es die wahre erste Dimension als erste Ausgabe zurück und gibt das Produkt aller anderen Dimensionen als zweite Ausgabe zurück. Es ist egal, wie groß die tatsächliche Dimensionalität Ihrer Daten ist.

In Ihrem Fall haben Sie ein RGB-Bild, daher wird empfohlen, dass eine explizite Dimension als zweite Eingabe für size angegeben wird. Dadurch wird sichergestellt, dass Sie die gewünschte Dimension erhalten.

nRows = size(I, 1); 
nCols = size(I, 2); 

A = imcrop(I, [0 0 nRows round(nCols/2)]); 

Im Allgemeinen verwende ich die Dimension Eingang size regelmäßig um sicherzustellen, dass ich genau die Dimension erhalten, die ich will.

Verwandte Themen