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

技术求助:如何从含非连续线的成绩单图像生成完整表格线?

从断裂表格线条生成完整表格的解决方案

1. 先矫正透视变形(解决线条非直线问题)

照片拍摄的成绩单大概率存在透视畸变,导致线条走形,先做透视矫正:

  • 提取图像边缘后,通过轮廓检测定位表格的四个角点(优先筛选面积最大的四边形轮廓)
  • 用透视变换将畸变表格映射为正矩形,让线条回归近似直线状态,后续补线操作会更精准

2. 形态学闭运算补全断裂线条

针对线条不连续的核心问题,用形态学闭运算填补缝隙:

  • 先将图像转为二值图(线条为黑色0,背景白色255),再反转图像让线条为白色、背景为黑色,方便形态学操作
  • 分别构造水平、垂直方向的结构元素:横向用宽高比大的矩形核,纵向用宽高比小的矩形核,分别执行闭运算后合并结果
  • 示例OpenCV代码:
import cv2
import numpy as np

# 读取预处理后的二值图1
img = cv2.imread('pic1.png', 0)
# 反转图像:线条白,背景黑
img_inv = cv2.bitwise_not(img)

# 补全横向断裂线条
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (20, 1))
horizontal_lines = cv2.morphologyEx(img_inv, cv2.MORPH_CLOSE, horizontal_kernel, iterations=2)

# 补全纵向断裂线条
vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 20))
vertical_lines = cv2.morphologyEx(img_inv, cv2.MORPH_CLOSE, vertical_kernel, iterations=2)

# 合并横竖线条并反转回原格式
combined = cv2.bitwise_or(horizontal_lines, vertical_lines)
result = cv2.bitwise_not(combined)

# 保存结果图2
cv2.imwrite('pic2.png', result)

3. 细节优化

  • 若合并后存在多余噪声,可通过开运算或轮廓过滤(保留面积较大的线条轮廓)去除
  • 调整结构元素的尺寸:根据实际断裂缝隙的宽度调整核的大小,缝隙越大,核尺寸相应调大

内容的提问来源于stack exchange,提问作者I am I.A.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:12:54