【问题标题】:Drawing a horizontal and vertical line in an image在图像中绘制水平和垂直线
【发布时间】:2026-01-08 03:30:03
【问题描述】:

我有一个包含表格的图像。表格中有一条水平虚线,我想用一条实线替换它。另外,我必须在列之间绘制垂直线。谁能帮助我,我的方法应该是什么?我正在使用 python。

【问题讨论】:

  • 请添加一个可重现的示例来生成您正在展示的输出!
  • 我展示的图片是输入图片。
  • 输入什么?你想从图像中读取表格吗??
  • @raphael:OP 想要绘制水平和垂直分隔符。
  • 这是学校练习还是现实生活中的问题?

标签: python opencv image-processing


【解决方案1】:

提示:

执行水平腐蚀是查找水平线位置和分隔文档部分的良好开端。然后大的垂直侵蚀将帮助您找到列,尽管这更具挑战性。

【讨论】:

  • 能否请您分享代码以获得上述结果。
  • @mohdehshankhan:不,是使用专有软件完成的。但这将是三行代码。
【解决方案2】:

我不知道这个输出是否对你有好处,但正如@Yves Daoust 所说,侵蚀过程可能会使你的问题受益。

output

import cv2
import numpy as np
image = cv2.imread('hough.jpg')

gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

kernel = np.ones((3,12), np.uint8)  #for horizontal erosion
e_im = cv2.erode(gray, kernel, iterations=1)  #performing erosion



edges = cv2.Canny(e_im,190,245,apertureSize = 3)     #edges
minLineLength=333
#houghlines for detecting those erosion lines
lines = cv2.HoughLinesP(image=edges,rho=0.5,theta=np.pi/180, threshold=222,lines=np.array([]), minLineLength=minLineLength,maxLineGap=7) 

a,b,c = lines.shape
# Draw the lines
if lines is not None:
    for i in range(0, len(lines)):
        l = lines[i][0]
        cv2.line(gray, (l[0], l[1]), (l[2], l[3]), (0, 0, 255), 3, cv2.LINE_AA)

cv2.imwrite("e_im.jpg",gray)

【讨论】: