【问题标题】:How to resize an image faster in python如何在python中更快地调整图像大小
【发布时间】:2017-06-28 06:19:19
【问题描述】:

我有一个图像,即像素值数组,可以说是 5000x5000(这是典型尺寸)。现在我想把它扩大2倍到10kx10k。 (0,0) 像素值的值转到展开图像中的 (0,0)、(0,1)、(1,0)、(1,1)。

之后,我使用 scipy.interpolate.rotate 旋转展开后的图像(考虑到我的数组大小,我相信没有比这更快的方法了)

接下来我必须再次将这个 10kx10k 数组调整为原始大小,即 5kx5k。为此,我必须在扩展图像中取 (0,0)、(0,1)、(1,0)、(1,1) 的平均像素值,并将它们放入新图像。

然而事实证明,这整个过程是一个昂贵的过程,并且考虑到我的数组的大小需要很多时间。 有更快的方法吗? 我正在使用以下代码来扩展原始图像

#Assume the original image is already given
largeImg=np.zeros((10000,10000), dtype=np.float32)
for j in range(5000):
    for k in range(5000):
          pixel_value=original_img[j][k]
          for x in range((2*k), (2*(k+1))):
                for y in range((2*j), (2*(j+1))):
                    largeImg[y][x] = pixel_value

类似的方法用于在旋转后将图像缩小到原始大小。

【问题讨论】:

    标签: python arrays image numpy scipy


    【解决方案1】:

    在 numpy 中你可以使用repeat:

    large_img = original_img.repeat(2, axis=1).repeat(2, axis=0)
    

    final_img = 0.25 * rotated_img.reshape(5000,2,5000,2).sum(axis=(3,1))
    

    或使用scipy.ndimage.zoom。这可以为您提供比 numpy 方法更平滑的结果。

    【讨论】:

      【解决方案2】:

      有一个不错的库,它可能包含处理图像所需的所有功能,包括旋转:

      http://scikit-image.org/docs/dev/api/skimage.transform.html#skimage.transform.rotate

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-18
        • 1970-01-01
        • 1970-01-01
        • 2010-12-21
        • 2016-08-25
        • 2010-11-27
        • 2011-07-19
        相关资源
        最近更新 更多