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

使用cv2按matplotlib自定义网格标签切分图像并以对应标签命名文件

问题核心原因

你当前的切分代码存在两个不匹配的问题:

  • 坐标系差异:matplotlib的坐标原点在图像左下角,y轴向上递增;OpenCV读取的图像数组原点在左上角,y轴向下递增,直接按行从上到下切分的话y轴标签顺序完全颠倒
  • 遍历顺序问题:你当前的循环是从图像左上角开始逐行切分,和要求的「从左下角开始向外扩展」的顺序不匹配,文件名偏移量也没有和标签生成规则对齐
修正后可直接运行的代码
import cv2
import os

# 固定参数,和你matplotlib侧的配置完全保持一致
GRID_SIZE = 128
X_TAG_OFFSET = 18
Y_TAG_OFFSET = 39

# 读取原图,创建输出文件夹(已存在则跳过不报错)
img = cv2.imread("sunset.png")
os.makedirs("split", exist_ok=True)
img_h, img_w = img.shape[:2]

# 计算横、纵向的网格总数量,逻辑和matplotlib侧完全对齐
nx = int(img_w / GRID_SIZE)
ny = int(img_h / GRID_SIZE)

# 遍历顺序严格匹配标签生成规则:从最底部一行开始,从左到右切分,逐行向上
for j in range(ny):
    # 计算当前j对应的OpenCV行坐标范围(修正y轴方向差)
    r_start = img_h - (j + 1) * GRID_SIZE
    r_end = r_start + GRID_SIZE
    for i in range(nx):
        c_start = i * GRID_SIZE
        c_end = c_start + GRID_SIZE
        # 裁剪当前网格
        grid = img[r_start:r_end, c_start:c_end, :]
        # 文件名完全匹配标签命名规则
        save_path = f"split/{i + X_TAG_OFFSET}_{j + Y_TAG_OFFSET}.png"
        cv2.imwrite(save_path, grid)
逻辑验证点
  • 左下角第一个切出的网格文件名为18_39.png,同一行向右依次为19_39.png、20_39.png,完全符合你的命名要求
  • 向上一行的第一个网格文件名为18_40.png,和标签生成逻辑里j+39的规则完全对应
  • 切分的每个网格尺寸为128×128px,和你设置的网格间隔完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:54:29