使用python-numpy放大图像

Abh*_*bhi 1 python image-manipulation numpy scipy

我正在尝试放大图像。

 import numpy as np
 from scipy.ndimage.interpolation import zoom
 import Image 
 zoom_factor = 0.05 # 5% of the original image 
 img = Image.open(filename)
 image_array = misc.fromimage(img)
 zoomed_img = clipped_zoom(image_array, zoom_factor)
 misc.imsave('output.png', zoomed_img)
Run Code Online (Sandbox Code Playgroud)

裁剪缩放参考:
Scipy旋转和缩放图像而无需更改其尺寸

这不起作用,并引发以下错误: ValueError: could not broadcast input array from shape

关于此的任何帮助或建议是否有一种方法可以在给定缩放系数的情况下缩放图像。那是什么问题呢?

追溯:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 1443, in _execute
    result = method(*self.path_args, **self.path_kwargs)
  File "title_apis_proxy.py", line 798, in get
    image, msg = resize_image(image_local_file, aspect_ratio, image_url, scheme, radius, sigma)
  File "title_apis_proxy.py", line 722, in resize_image
    z = clipped_zoom(face, 0.5, order=0)
  File "title_apis_proxy.py", line 745, in clipped_zoom
    out[top:top+zh, left:left+zw] = zoom(img, zoom_factor, **kwargs)
ValueError: could not broadcast input array from shape (963,1291,2) into shape (963,1291,3)
Run Code Online (Sandbox Code Playgroud)

ali*_*i_m 5

clipped_zoom先前回答中使用的功能仅适用于单通道图像。

目前,它正在对“颜色”维度以及输入数组的宽度和高度维度应用相同的缩放系数。ValueError发生这种情况的原因是,out数组已初始化为与输入相同的通道数,但是zoom由于缩放因子,结果具有较少的通道。

要使其适用于多通道图像,您可以将每个颜色通道分别传递给clipped_zoom并连接结果,或者可以传递元组而不是标量作为zoom_factor参数scipy.ndimage.zoom

我已经使用后一种方法更新了先前的答案,因此它现在既适用于多通道图像,也适用于单色图像。