如何修复从scipy.misc导入时出现“无法导入名称'imresize'”错误的问题?

14

我正在使用Google Colab运行Python代码,尝试缩小图像。

from keras.layers import Lambda
import tensorflow as tf
from skimage import data, io, filters
import numpy as np
from numpy import array
from numpy.random import randint
from scipy.misc import imresize
import os
import sys

import matplotlib.pyplot as plt
plt.switch_backend('agg')


# Takes list of images and provide LR images in form of numpy array
def lr_images(images_real , downscale):

    images = []
    for img in  range(len(images_real)):
        images.append(imresize(images_real[img],[images_real[img].shape[0]//downscale,images_real[img].shape[1]//downscale], interp='bicubic', mode=None))
    images_lr = array(images)
    return images_lr

它应该缩小图片,但会显示此错误。

from scipy.misc import imresize ImportError: cannot import name 'imresize'


1
imresize自版本1.3起已从Scipy中移除,因为它是可在其他地方找到的功能的重复,具体而言,它与Pillow模块的功能相同。 - jasonharper
7个回答

6

通过以下方式安装Scipy 1.1.0:

pip install scipy==1.1.0

3

这对我有作用......在导入中,我做了以下更改:

from scipy.misc import imresize

对于这个:

from skimage.transform import resize

一个我改变实现方式的例子:

这个:

img = imresize(img, (150, 150, 3)).astype('float32')/255.

对于这个:

img = resize(img, (150, 150, 3)).astype('float32')/255.

我希望这也能对你有所帮助...


如果尺寸是整数(1d),这样做是行不通的。 - stuckoverflow

3

这个已经被弃用了。 请使用 cv2 的 resize 函数代替。

import cv2
size = (80,80)
cv2.resize(img, size)

1
你可以尝试这个:

skimage.transform.resize

https://scikit-image.org/docs/stable/auto_examples/transform/plot_rescale.html

首先,导入resize:

from skimage.transform import resize

然后传入图像、x/y尺寸值(此示例中为原始尺寸的一半)和anti_aliasing设置为true以防止走样伪影:

image_resized = resize(image, (image.shape[0] // 2, image.shape[1] // 2), anti_aliasing=True)


你能提供一些例子吗? - Anthony Piñero

1
您可以像评论中建议的那样使用Pillow。您的代码更改如下所述:
import PIL

images.append(np.array(PIL.Image.fromarray(images_real[img]).resize( 
      [images_real[img].shape[0]//downscale, 
    images_real[img].shape[1]//downscale],resample=PIL.Image.BICUBIC)))

如果您的图像以浮点数表示,则会出现错误,提示“无法处理此数据类型”。在这种情况下,您需要将图像转换为uint格式,方法如下:
images.append(np.array(PIL.Image.fromarray( 
    (images_real[img]*255).astype(np.uint8)).resize( 
    [images_real[img].shape[0]//downscale, 
    images_real[img].shape[1]//downscale],resample=PIL.Image.BICUBIC)))

0

imresize1.3.0之后不再可用。

您可以使用PIL中的Image.resize

安装Pillow:

pip install Pillow

然后导入

from PIL import Image.resize as imresize

导入Image.resize至少在PIL 9.1.0中不起作用。您应该先导入Image,然后为对象调用resize。在此处查看文档:https://pillow.readthedocs.io/en/stable/reference/Image.html?highlight=resize#PIL.Image.Image.resize - Vyachez

-1

我曾经遇到过类似的问题,并且解决方法如下:

import scpy

然后使用函数,就像这样:scipy.misc.imresize(args)

Paulo

如果scipy版本没有imresize函数,它将无法工作。 - Ashwin Balani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接