2016-03-22 41 views
0

我想使用imcrop将图像分成一半。但是,结果并不完全是图片的一半。问题是什么?使用imcrop将图像分成一半

的代码是在这里:

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); 

任何图片可以被用作一个例子。

+1

我认为这只发生在奇数宽度的图像上,是吗?你不能将一个像素分成两半。 – hbaderts

+0

谢谢!我知道这是因为在'[x,y] = size(I)'中,size()的返回值有3维,但我使用2维[x,y]来接收,所以y的值是错误。 –

回答

0

如果您只请求size的两个输出,那么它将返回第一个真实的维度作为第一个输出,并返回所有其他维度的乘积作为第二个输出。它并不关心数据的实际维度。

对于您的情况,您有RGB图像,因此建议将明确尺寸指定为size的第二个输入。这将确保您获得所需的维度。

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

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

一般情况下,我使用的尺寸输入定期size,以确保我得到正是我想要的尺寸。