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

如何使用Python OpenCV移除图像中的竖直线条

横竖线移除代码调整方案

你当前的代码已经内置了竖直线条的处理逻辑,未生效是参数和你的图像适配度不足,只需修改几处参数即可实现横竖线同时移除:

核心调整点

  • 垂直形态学核的尺寸适配示例图的竖线长度,将(1,50)调整为(1,30),如果你的其他图像竖线更长可适当调大第二个参数
  • 放开垂直检测后的膨胀操作注释,避免短线、断线漏检
  • 可根据线条粗细调整绘制轮廓的线宽,确保完全覆盖原始线条

调整后完整代码

import cv2
import matplotlib.pyplot as plt
import glob
import os
def remove_lines(image_path,outdir):
    image = cv2.imread(image_path)
    result = image.copy()
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

    # 移除水平线
    horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (50,1))
    remove_horizontal = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, horizontal_kernel, iterations=2)
    
    cnts = cv2.findContours(remove_horizontal, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if len(cnts) == 2 else cnts[1]
    for c in cnts:
        cv2.drawContours(result, [c], -1, (255,255,255), 5)

    # 移除竖直线
    vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1,30)) # 调整核高度适配竖线长度
    remove_vertical = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, vertical_kernel, iterations=2)
    remove_vertical = cv2.dilate(remove_vertical , vertical_kernel, iterations=1) # 放开膨胀操作,避免断线
    cnts = cv2.findContours(remove_vertical, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if len(cnts) == 2 else cnts[1]
    for c in cnts:
        cv2.drawContours(result, [c], -1, (255,255,255), 5) # 若竖线更粗可加大最后这个线宽参数

    cv2.imwrite(os.path.join(outdir,os.path.basename(image_path)), result)
    plt.imshow(result)
for jpgfile in glob.glob(r'C:\custom\TableDetectionWork\images/*'):
    print(jpgfile)
    remove_lines(jpgfile,r'C:\custom\TableDetectionWork\output/')

效果参考

原始图像:
原始图像
已移除水平线的中间效果:
已移除水平线
运行调整后代码即可得到同时移除横竖线的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:24:03