如何基于白色边框使用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
相关产品推荐
相关产品推荐

