只在一个方向上使用膨胀?
Using dilation in only one direction?
这是我在 Stack Overflow 上的第一个 post,如果问题定义不够,我很抱歉。
我目前正致力于从图像中提取 table 数据,我需要一种方法来仅在垂直方向上扩大文本,以便我可以获得清晰的列表示,以用于进一步分割。
去除水平和垂直线并按位变换图像后,我处于这个阶段:
这个问题的理想目标是:
是否有对我的情况有帮助的方法或算法?
您可以使用适当的结构元素调用 cv2.dilate
。
import cv2
pre_img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
h, w = pre_img.shape
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, ksize=(1, 2 * h))
dilated = cv2.dilate(pre_img, kernel)
cv2.imshow('input', pre_img)
cv2.imshow('output', dilated)
cv2.waitKey(0)
输入
输出
为了更好地可视化正在发生的事情:
blended = (pre_img.astype(float) + dilated.astype(float)) / 2
cv2.imshow('blended', blended.astype(np.uint8))
cv2.waitKey(0)
混合
看起来你不需要膨胀,而是最大投影。对于每一列,检查是否设置了任何像素。为此使用 numpy.any:
result = np.any(image, axis=0)
这是我在 Stack Overflow 上的第一个 post,如果问题定义不够,我很抱歉。
我目前正致力于从图像中提取 table 数据,我需要一种方法来仅在垂直方向上扩大文本,以便我可以获得清晰的列表示,以用于进一步分割。
去除水平和垂直线并按位变换图像后,我处于这个阶段:
这个问题的理想目标是:
是否有对我的情况有帮助的方法或算法?
您可以使用适当的结构元素调用 cv2.dilate
。
import cv2
pre_img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
h, w = pre_img.shape
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, ksize=(1, 2 * h))
dilated = cv2.dilate(pre_img, kernel)
cv2.imshow('input', pre_img)
cv2.imshow('output', dilated)
cv2.waitKey(0)
输入
输出
为了更好地可视化正在发生的事情:
blended = (pre_img.astype(float) + dilated.astype(float)) / 2
cv2.imshow('blended', blended.astype(np.uint8))
cv2.waitKey(0)
混合
看起来你不需要膨胀,而是最大投影。对于每一列,检查是否设置了任何像素。为此使用 numpy.any:
result = np.any(image, axis=0)