我有一张大小为260 x 260
像素的图片。我知道如何将其大小调整为140 x 140
像素,然后将其转换为灰度。让我们假设下面的matlab代码:
image = imread('my_image.jpg');
image_resized = imresize(image, [140 140]);
size(image_resized) % 140 x 140 x 3
image_gray = rgb2gray(image_resized);
size(image_gray) % 140 x 140
我想要的是具体案例。我有兴趣将图像标准化为 140像素的高度,其中宽度相应地重新调整,以保持图像宽高比。不幸的是,我不知道如何编辑上面的代码。
非常感谢任何帮助。
答案 0 :(得分:2)
您可以使用NaN
作为所需的大小参数来表明您想要的内容
image_resized = imresize( image, [140 NaN] );
这基本上告诉了Matlab"不要打扰我的图像宽度 - 自己弄明白!"。
有关详细信息,请参阅imresize
文档。
答案 1 :(得分:1)
试试这个 -
image = imread('my_image.jpg');
desired_height = 140;
%%// Width of the resized image keeping the aspect ratio same as before
n2 = round((size(image,2)/size(image,1))*desired_height);
%%// Resized image
image_resized = imresize(image, [desired_height n2]);
修改1
注意:另外,您也可以按照Shai的解决方案的建议使用NaN imresize
规定的大小,但是ceils或者将大小调整为最小值在大多数情况下都不想要。
为了证明这种情况,我尝试imresize
将高度保持为173,我通过手动调整大小来调整大小,而不是让imresize
决定大小。
用于实验的代码
%%// Resized image
image_resized_with_auto_sizing = imresize(image, [desired_height NaN]);
image_resized_with_manual_sizing = imresize(image, [desired_height n2]);
我的实验的尺寸输出 -
>> whos image_resized_with_manual_sizing image_resized_with_auto_sizing
Name Size Bytes Class Attributes
image_resized_with_auto_sizing 173x185x3 96015 uint8
image_resized_with_manual_sizing 173x184x3 95496 uint8
注意两种情况的宽度差异。这个问题也在讨论here。