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

使用numpy提取像素实现图片四等分裁剪时输出结果异常求助

问题根源

你的代码核心错误出在numpy多维数组的切片操作上:

  • img[xmin:xmax][ymin:ymax]的执行逻辑是:先对图像数组的0轴(对应图像高度)裁剪xmin到xmax范围,得到一个尺寸为(maxX, 原图宽度, 通道数)的中间数组,再对这个中间数组的0轴继续裁剪ymin到ymax范围,全程没有对1轴(对应图像宽度)做裁剪,才会出现半幅、窄条的错误输出。
  • 正确的numpy多维数组切片需要用逗号分隔不同维度的裁剪范围,写法为img[xmin:xmax, ymin:ymax]。

另外还有几处可优化的非致命问题:

  • Python语法中不需要在每行末尾加英文分号
  • imageio.imsave的输出文件名后缀是.png,但第三个参数指定了'jpg',格式参数和输出后缀不匹配
  • 不需要提前初始化全零的imagesList数组,可以直接赋值裁剪后的结果
修正后代码
import numpy as np
from PIL import Image
import imageio
import math

filename = "preview_redd_it-8qwf04k4uc181.jpg"
im_in = Image.open(filename)
img = np.asarray(im_in)
filename = filename.removesuffix(".jpg")

print(img.shape)
shape = img.shape

maxX = math.floor(shape[0]/2)
maxY = math.floor(shape[1]/2)

for i in range(0,4):
    xmin = (i%2)*maxX
    xmax = xmin + maxX
    ymin = int(i/2)*maxY
    ymax = ymin + maxY

    print(f"{xmin}:{xmax}")
    print(f"{ymin}:{ymax}\n")

    # 修正多维切片写法
    crop_img = img[xmin:xmax, ymin:ymax]
    # 保存格式和后缀统一为png
    imageio.imsave(f"{filename}{i}.png", crop_img)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:06:02