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

基于Python实现沿自定义中线分割图像的技术方案咨询

解决方案

可以通过创建掩码+位运算的方式实现沿中线分割图像,以下是基于OpenCV和NumPy的具体实现步骤:

步骤1:导入依赖库

import cv2
import numpy as np

步骤2:定义坐标与加载图像

# 你的中点坐标数组
midline_points = [(954, 88), (905, 97), (855, 107), (805, 114), (755, 125), (705, 134), (655, 139), (605, 141), (555, 139), (505, 134), (455,139), (405, 146), (355, 146), (305, 144), (255, 145), (205, 125), (155, 120), (105, 114), (55, 104), (1, 156)]
# 转换为OpenCV可处理的int32格式数组
points = np.array(midline_points, np.int32)

# 加载原始图像,替换为你的图像路径
img = cv2.imread("原始图像.png")
height, width = img.shape[:2]

步骤3:生成上下区域掩码并分割图像

提取上半部分图像

上半区域需要将中线与图像顶部边界连接成闭合多边形,以此生成掩码:

# 构建上半区域闭合多边形顶点
upper_polygon = np.concatenate([
    [[0, 0]],               # 图像左上角
    [[width - 1, 0]],       # 图像右上角
    points[::-1],           # 反转中线坐标,从最后一个点回到第一个点
    [[0, 0]]                # 闭合多边形
])

# 创建上半区域掩码
upper_mask = np.zeros((height, width), dtype=np.uint8)
cv2.fillPoly(upper_mask, [upper_polygon], 255)

# 提取上半部分图像
upper_img = cv2.bitwise_and(img, img, mask=upper_mask)

提取下半部分图像

下半区域将中线与图像底部边界连接成闭合多边形:

# 构建下半区域闭合多边形顶点
lower_polygon = np.concatenate([
    [[0, height - 1]],      # 图像左下角
    [[width - 1, height - 1]], # 图像右下角
    points,                 # 原始中线坐标顺序
    [[0, height - 1]]       # 闭合多边形
])

# 创建下半区域掩码
lower_mask = np.zeros((height, width), dtype=np.uint8)
cv2.fillPoly(lower_mask, [lower_polygon], 255)

# 提取下半部分图像
lower_img = cv2.bitwise_and(img, img, mask=lower_mask)

步骤4:保存或查看结果

# 保存分割后的图像
cv2.imwrite("上半部分图像.png", upper_img)
cv2.imwrite("下半部分图像.png", lower_img)

# 显示结果(可选)
cv2.imshow("Upper Part", upper_img)
cv2.imshow("Lower Part", lower_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

关键注意事项

  • 确保中线坐标的顺序是连续的(从图像一侧到另一侧),否则多边形可能出现异常
  • 如果使用PIL库实现,逻辑类似:通过ImageDraw绘制闭合多边形掩码,再用Image.composite提取区域

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:02:08