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

Python中np.hsplit正常运行但np.vsplit报数组均等分割失败错误

np.vsplit拆分图像等分错误问题解决

错误翻译

你收到的英文错误array split does not result in an equal division中文含义为:数组拆分无法得到大小相等的子数组

触发原因

numpy拆分函数要求拆分维度的总长度必须可以被拆分份数整除,否则就会抛出该错误,两个拆分函数对应的维度如下:

  • np.hsplit(arr, n):沿**水平维度(数组第1位arr.shape[1],对应图像宽度)**拆分,要求arr.shape[1] % n == 0
  • np.vsplit(arr, n):沿**垂直维度(数组第0位arr.shape[0],对应图像高度)**拆分,要求arr.shape[0] % n == 0

场景问题排查

你表述原图尺寸为6×10(日常图像尺寸表述为宽×高),对应numpy数组格式应为(高, 宽)即(10,6)(灰度图)或(10,6,3)(彩色图):

  1. 第一步np.hsplit(img,6)运行正常符合预期:img.shape[1] = 6,6可以被6整除,拆分后每列的shape为(10,1)或(10,1,3)
  2. 第二步报错说明你实际加载的每列数据的垂直维度长度不是10的倍数,大概率是你对原图尺寸的表述和实际加载后的numpy数组维度不符,或是原图加载时存在额外填充、通道维度偏差。

解决方案

方案1:动态适配拆分份数(推荐)

先打印维度确认,再用实际维度长度作为拆分份数,保证可整除:

def splitBoxes(img):
    # 调试用:打印原图维度确认
    print("原图shape:", img.shape)
    cols= np.hsplit(img,6) 
    for c in cols:
        # 调试用:打印当前列的维度,确认垂直维度长度
        print("当前列shape:", c.shape)
        # 直接用当前列的垂直维度长度作为拆分份数
        rows = np.vsplit(c, c.shape[0])
        cv2.imshow('COL', c) 
        cv2.waitKey(0)

方案2:固定尺寸预处理

如果必须拆分得到10行,可先对原图做resize,保证垂直维度长度符合要求:

def splitBoxes(img):
    # 把原图统一调整为宽6、高10的尺寸,确保拆分符合预期
    img = cv2.resize(img, (6,10))
    cols= np.hsplit(img,6) 
    for c in cols:
        rows = np.vsplit(c,10)
        cv2.imshow('COL', c) 
        cv2.waitKey(0)

内容的提问来源于stack exchange,提问作者AHM Rayhanuzzaman Roky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:06:05