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

如何基于白色边框使用Python将单张图片分割为多张图片

基于白色边框分割图片的Python实现

所需依赖

先安装必要的处理库:

pip install opencv-python numpy

实现步骤与代码

核心思路是通过OpenCV识别白色边框的轮廓,提取每个轮廓对应区域并裁剪保存:

import cv2
import numpy as np
import os

def split_image_by_white_border(input_img_path, output_dir):
    # 加载输入图片
    img = cv2.imread(input_img_path)
    # 转为灰度图简化处理逻辑
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # 二值化处理:将白色边框转为纯白(255),其余区域转为纯黑(0)
    _, binary = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY)
    
    # 检测最外层轮廓,忽略嵌套的内部轮廓
    contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    # 筛选有效轮廓:排除面积过小的噪点轮廓,保留子图边框
    valid_contours = [cnt for cnt in contours if cv2.contourArea(cnt) > 1000]
    
    # 遍历轮廓,裁剪并保存子图
    for idx, cnt in enumerate(valid_contours):
        x, y, w, h = cv2.boundingRect(cnt)
        sub_img = img[y:y+h, x:x+w]
        output_path = f"{output_dir}/sub_img_{idx+1}.png"
        cv2.imwrite(output_path, sub_img)
        print(f"已保存子图:{output_path}")

# 调用示例
if __name__ == "__main__":
    input_path = "你的输入图片路径.png"
    output_directory = "分割结果保存目录"
    os.makedirs(output_directory, exist_ok=True)
    split_image_by_white_border(input_path, output_directory)

关键细节说明

  • 阈值调整:cv2.threshold的阈值(示例中240)可根据图片实际亮度微调,确保白色边框能被准确识别。
  • 轮廓筛选:面积阈值(示例中1000)需根据子图实际大小调整,避免误把细小白色噪点当作子图边框。
  • 轮廓检测模式:cv2.RETR_EXTERNAL只检测最外层轮廓,避免内部线条干扰分割结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:20:19