如何将图像重新缩放到标准尺寸?

时间:2017-03-27 21:24:14

标签: image python-3.x opencv image-processing computer-vision

l具有不同大小的图像:(94,102),(42,62),(67,27),(23,21),(23,17)。所有字符都位于图像的中心,其余字符为黑色或白色。我想将图像标准化为(32,32)

以下是我的数据样本的链接:https://drive.google.com/open?id=0B-QJnh0Uw96lbFVHbVBPclhycFk

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

您希望通过为每个图像单独计算的缩放系数来均匀缩放图像。如果您采用较长的维度并将其除以32(32.0 / max(width, height)),那么您将获得一个可以将宽度和高度乘以的数字。

scale = 32.0 / max(width, height)
scaledWidth = round(width * scale, 0)
scaledHeight = round(height * scale, 0)

这会让你到达中途,因为较大的尺寸现在是32 - 较小的尺寸可能小于32.因此,您需要在较小的尺寸中填充图像以弥补差异。你填多少钱?好吧,总填充量将为32 - min(scaledWidth, scaledHeight)。你想把一半放在另一边,一半放在另一边。一个潜在的问题是它可能是一个奇数个像素 - 处理它的一个简单方法是将一半放在一边而将剩下的放在另一边。

totalPadding = 32 - min(scaledWidth, scaledHeight)
paddingBefore = math.floor(totalPadding / 2) # <-- "half" before
paddingAfter = totalPadding - paddingBefore  # <-- "the rest" after

然后你只需要调整图像大小。我必须承认,我实际上并不熟悉您所拥有的图像处理功能。然而,它的要点是:

  1. 创建一个32x32的新图像。
  2. (可选)如果要确保扩展背景与原始图像的背景相同,因为您提到它将是黑色或白色,然后使用您在坐标处找到的相同颜色填充32x32图像(0 ,0)原始图像。
  3. 将原始图像绘制到新图像中,指定要调整其大小。您需要确定图像是纵向还是横向 - 如果是纵向,则需要在位置(paddingBefore, 0)上绘制,否则您需要在位置(0, paddingBefore)上绘制它。我使用过的大多数图形框架都允许您指定“源”和“目标”矩形,因此源矩形将为(0, 0)-(width, height),而您的dest矩形的大小为(scaledWidth, scaledHeight),并且上述原点,取决于图像是更宽还是更高。