You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中最快imresize函数选型咨询及浮点输出需求说明

最快的Python图像插值(替代scipy.misc.imresize)

Hey there! 针对你提到的scipy.misc.imresize的两个痛点——只能输出整数矩阵、运行速度偏慢,下面是几个速度更快且支持浮点输出的替代方案,按性能从优到劣排序:

  • OpenCV的cv2.resize
    这绝对是目前速度最快的选项,底层基于优化过的C++实现,处理大图像的优势特别明显。它直接支持输出浮点型数组(通过指定dtype参数),而且提供了多种插值算法可选(比如双线性、双三次、最近邻等)。示例代码:

    import cv2
    import numpy as np
    
    # 假设img是输入的图像数组(整数或浮点型都可以)
    resized_img = cv2.resize(
        img, 
        (new_width, new_height), 
        interpolation=cv2.INTER_LINEAR,  # 可替换为其他插值方式
        dtype=np.float32  # 指定输出为浮点型
    )
    

    小提醒:OpenCV默认颜色通道是BGR,如果处理的是RGB图像,需要先转换通道顺序,但单纯的数值插值不受这个影响,速度优势依然拉满。

  • Pillow的Image.resize + 浮点数组转换
    Pillow的resize API简洁易用,速度虽然比OpenCV稍慢,但比scipy的旧函数快不少。要得到浮点输出,只需要把resize后的PIL图像转换为numpy浮点数组即可:

    from PIL import Image
    import numpy as np
    
    # 从numpy数组创建PIL图像
    img_pil = Image.fromarray(img)
    # 执行resize,指定插值算法
    resized_pil = img_pil.resize(
        (new_width, new_height), 
        resample=Image.Resampling.BILINEAR  # 新版本Pillow用这个枚举值
    )
    # 转换为浮点型numpy数组
    resized_img = np.array(resized_pil, dtype=np.float32)
    

    如果你用的是旧版Pillow,resample参数可以用Image.BILINEAR这类常量,效果是一样的。

  • 额外提一下:scipy官方推荐的替代,但速度一般
    scipy.misc.imresize其实已经被废弃了,官方推荐用skimage.transform.resize,它支持浮点输出,但速度比前面两个选项慢很多,适合对速度要求不高但需要和科学计算流程衔接的场景,这里就不优先推荐了。

总结下来,**OpenCV的cv2.resize**是完全满足你需求的最快选择,其次是Pillow。如果你的项目还没引入OpenCV,只需要简单安装pip install opencv-python就能用啦。

内容的提问来源于stack exchange,提问作者Qiang Zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:22:48