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

使用numpy.resize调整图像数据失效,如何正确实现图像缩放?

问题原因

np.resize()根本不是用来做图像缩放的工具,它的逻辑是重新调整数组形状,多余元素截断、缺的元素重复原数组填充,完全不考虑图像的空间结构。你原本的图像是(834,1102),缩到(417,551)时,它只是把原数组的像素按顺序重新排列成新形状,自然会把飞机的像素彻底打乱,导致图像失真。

正确的解决方法

既然已经在用PIL,直接用PIL自带的Image.resize()就好,它会用插值算法(默认双线性插值)来保留图像内容,生成符合预期的低分辨率版本:

from PIL import Image

# 读取为灰度图
image = Image.open(input_image).convert("L")
# 缩放,注意PIL的resize参数是(width, height),和numpy的shape(height, width)相反
resized_image = image.resize((551, 417))
resized_image.save("test.jpeg")

如果一定要用numpy配合插值操作,可以用OpenCV或者scikit-image的工具,比如用OpenCV的示例:

import cv2
import numpy as np

# 读取灰度图
arr = cv2.imread(input_image, cv2.IMREAD_GRAYSCALE)
# 用双线性插值缩放,dsize参数是(width, height)
resized_arr = cv2.resize(arr, (551, 417), interpolation=cv2.INTER_LINEAR)
# 保存图像
cv2.imwrite("test.jpeg", resized_arr)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:13:15