gpt4 book ai didi

python - 在 Python 中,如何缩放存储为 NumPy 数组的图像的大小?

转载 作者:太空狗 更新时间:2023-10-30 02:10:03 30 4
gpt4 key购买 nike

我按以下方式创建了一个 NumPy 数组:

data = numpy.zeros((1, 15, 3), dtype = numpy.uint8)

然后我用 RGB 像素值填充这个数组,生成一个可以使用如下过程保存的小彩色图像:

image = Image.fromarray(data)
image.save("image.png")

为了创建一个图像(比如 600 x 300 像素),我如何扩大 NumPy 数组的大小(没有插值)?

最佳答案

您可以使用 numpy.kron按照评论中的建议,或者您可以使用以下选项

1] 使用PILLOW 保持纵横比

  • 如果你想保持图像的宽高比,那么你可以使用thumbnail()方法

    from PIL import Image

    def scale_image(input_image_path,
    output_image_path,
    width=None,
    height=None):
    original_image = Image.open(input_image_path)
    w, h = original_image.size
    print('The original image size is {wide} wide x {height} '
    'high'.format(wide=w, height=h))

    if width and height:
    max_size = (width, height)
    elif width:
    max_size = (width, h)
    elif height:
    max_size = (w, height)
    else:
    # No width or height specified
    raise RuntimeError('Width or height required!')

    original_image.thumbnail(max_size, Image.ANTIALIAS)
    original_image.save(output_image_path)

    scaled_image = Image.open(output_image_path)
    width, height = scaled_image.size
    print('The scaled image size is {wide} wide x {height} '
    'high'.format(wide=width, height=height))


    if __name__ == '__main__':
    scale_image(input_image_path='caterpillar.jpg',
    output_image_path='caterpillar_scaled.jpg',
    width=800)
  • 我使用了 Image.ANTIALIAS 标志,它将应用高质量的下采样过滤器,从而产生更好的图像

2] 使用OpenCV

  • OpenCV 有cv2.resize() 函数

    import cv2
    image = cv2.imread("image.jpg") # when reading the image the image original size is 150x150
    print(image.shape)
    scaled_image = cv2.resize(image, (24, 24)) # when scaling we scale original image to 24x24
    print(scaled_image.shape)
  • 输出

    (150, 150)
    (24, 24)
  • cv2.resize() 函数也有插值作为参数,您可以通过它指定如何调整图像大小
  • 插值方法:

    • INTER_NEAREST - 最近邻插值法
    • INTER_LINEAR - 双线性插值(默认使用)
    • INTER_AREA - 使用像素面积关系重新采样。它可能是图像抽取的首选方法,因为它可以提供无摩尔纹的结果。但是当图像被放大时,它类似于INTER_NEAREST方法。
    • INTER_CUBIC - 4x4 像素邻域的双三次插值
    • INTER_LANCZOS4 - 8x8 像素邻域的 Lanczos 插值

3] 使用PILLOW

  • 使用Image.resize()

    from PIL import Image
    sourceimage= Image.open("image.jpg") # original image of size 150x150
    resized_image = sourceimage.resize((24, 24), resample=NEAREST) # resized image of size 24x24
    resized_image.show()

4] 使用SK-IMAGE

  • 使用skimage.transform.resize()

    from skimage import io
    image = io.imread("image.jpg")
    print(image.shape)
    resized_image = skimage.transform.resize(image, (24, 24))
    print(resized_image.shape)
  • 输出

    (150, 150)
    (24, 24)

5] 使用SciPy

  • 使用scipy.misc.imresize()函数

    import numpy as np
    import scipy.misc

    image = scipy.misc.imread("image.jpg")
    print(image.shape)
    resized_image = scipy.misc.imresize(x, (24, 24))
    resized_image
    print(resized_image.shape)
  • 输出

    (150, 150)
    (24, 24)

关于python - 在 Python 中,如何缩放存储为 NumPy 数组的图像的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32337064/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com