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

scipy.misc.imresize已弃用,替换为skimage.transform.resize却结果不一致

解决scipy.misc.imresize与skimage.transform.resize的输出差异问题

我懂你碰到的这个坑——scipy.misc.imresize被官方标了弃用,转用skimage.transform.resize后却发现输出结果对不上,其实核心是两者在数据类型、数值范围和默认插值逻辑上有本质区别,下面给你拆解清楚并给出对齐结果的方案:

为什么结果不一样?

  • 数值范围与类型差异:

    • scipy.misc.imresize处理后直接输出np.uint8类型的数组,像素值范围是[0, 255],和原始图像的格式一致
    • skimage.transform.resize默认会把像素值归一化到[0, 1],输出np.float64类型的浮点数组,这是最直观的差异来源
  • 默认插值方式不同:

    • scipy.misc.imresize默认用**双线性(bilinear)**插值
    • skimage.transform.resize默认用**双二次(biquadratic)**插值,这会导致像素细节上的细微差异

让skimage输出和scipy一致的代码

要完全对齐两者的结果,只需要做两个关键调整:

  1. 把skimage输出的归一化浮点值转回[0,255]的uint8类型
  2. 指定和scipy默认一致的插值方式

直接看完整示例代码:

import numpy as np
from skimage.transform import resize
from imageio import imread

img = imread('1.jpg')
target_size = (1280, 1280)

# 生成和scipy.misc.imresize完全对齐的结果
img_aligned = (resize(img, target_size, order=1) * 255).astype(np.uint8)

代码说明:

  • order=1:skimage里order=1对应双线性插值,和scipy.misc.imresize的默认interp='bilinear'完全匹配
  • 乘以255再转uint8:将skimage的归一化浮点值映射回scipy使用的0-255整数范围

不管你的图像是RGB彩色图、灰度图还是带alpha通道的图,这个逻辑都能直接套用,skimage会自动处理多通道的情况。

内容的提问来源于stack exchange,提问作者Panfeng Li

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:49:35