Skip to main content
 首页 » 编程设计

python之使用 python-numpy 放大图像

2025年05月04日27sharpest

我正在尝试放大图像。

 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) 

裁剪缩放引用:
Scipy rotate and zoom an image without changing its dimensions

这不起作用并抛出此错误: ValueError:无法从形状广播输入数组

关于此的任何帮助或建议 有没有办法在给定缩放系数的情况下缩放图像。问题是什么?

回溯:

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) 

请您参考如下方法:

clipped_zoom你正在使用的功能来 self 的 previous answer仅为单 channel 图像编写。

目前它对“颜色”维度以及输入数组的宽度和高度维度应用相同的缩放因子。 ValueError发生是因为 out数组被初始化为与输入相同的 channel 数,但是 zoom 的结果由于缩放系数, channel 较少。

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

我已经使用后一种方法更新了我之前的回答,因此它现在适用于多 channel 图像和单色图像。