如何处理不同的图像尺寸

Posted

技术标签:

【中文标题】如何处理不同的图像尺寸【英文标题】:How to deal with different image size 【发布时间】:2019-01-11 06:44:18 【问题描述】:

我正在处理图像以查找外部身体点,但是当我保存它们时,它们的大小不同,这会造成问题。

    我的原始图像是一个人。 (1.8Mb)

    我创建了一个人的蒙版,以从原始图像中检测外部身体部位并将其保存。 (400kb)

    从蒙版中,我获得了外体点并将它们绘制在原始图像上,但由于原始图像和蒙版图像的大小不同,它们没有对齐。

    为了保存没有轴和全尺寸的图像,以便它可以与原始图像匹配,我通过以下方法保存它们。保存后,它们看起来完全相同,但由于大小不同,点未对齐。

      plt.axis('off')
      fig.axes.get_xaxis().set_visible(False)
      fig.axes.get_yaxis().set_visible(False)
      plt.savefig('kmask.jpg',bbox_inches='tight',pad_inches = 0,dpi=1500)
    

我在原始图像上绘制点时的结果:

如何处理此类问题?

【问题讨论】:

为什么蒙版的大小与原始图像不同?你是故意的吗? 没有。当我按默认方法保存时,它变成了 50kb。这就是为什么我要更改 dpi 以创建原始图像大小的蒙版。 我说的是图像的尺寸,而不是它需要的内存。遮罩总是比图像占用更少的内存,但通常它与原始图像具有相同的尺寸(例如 256x256 像素) 当我在保存蒙版的同时删除 dpi 选项时,在绘图时我会在原始身体上得到非常小的身体轮廓。 【参考方案1】:

据我所知,您将蒙版保存为与原始图像不同的大小。

解决此问题的一种方法是首先确定原始图像的分辨率。如果您不知道,您可以随时查看:

img = plt.imread('body_image.jpg')
print(img.shape)
# The first two numbers correspond to the height and width of the image in pixels

问题在于 matplotlib 处理图像分辨率的方式不同。相反,它需要图形大小(以 英寸 为单位)和 DPI(或每英寸有多少 像素)。一种方法是计算您需要的值,并相应地保存图像。

image_height_in_pixels = height_in_inches * dpi

然后用这两个数字保存掩码。

f = plt.figure(figsize=(height_in_inches, width_in_inches))
plt.axis('off')
plt.savefig('kmask.jpg', bbox_inches='tight', pad_inches=0, dpi=dpi)

如果这不起作用,请尝试也保存原始图像,使用 matplotlib。这将确保它们具有相同的尺寸。

【讨论】:

我应该根据我的屏幕选择 dpi =96 选择一个dpi 和一个height_in_inches,其乘积为您的图像的高度(以像素为单位) 保存原始文件后,它也起作用了。不过这很奇怪!

以上是关于如何处理不同的图像尺寸的主要内容,如果未能解决你的问题,请参考以下文章

Viola-Jones 人脸检测器如何处理多种尺寸的人脸?

如何处理 libGDX 中的不同纵横比?

不同 iOS iPhone 尺寸上的全屏图像

如何处理 iPhone 4s、5 和 6 的屏幕尺寸,并使所有内容在所有设备上看起来都一样

SpriteKit - 如何处理多种屏幕尺寸?

浮动缩略图库,大小不一,如何处理?