【发布时间】:2019-09-10 04:59:41
【问题描述】:
我有一张图片,文字下方有一条水平线;通过各种技术按顺序应用后HoughLineP 和 HoughLine 以及这段代码
image = cv2.imread('D:\\detect_words.jpg')
gray = 255 - cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
for row in range(gray.shape[0]):
avg = np.average(gray[row, :] > 16)
if avg > 0.25:
cv2.line(image, (0, row), (gray.shape[1]-1, row), (0, 0, 255))
cv2.line(gray, (0, row), (gray.shape[1]-1, row), (0, 0, 0), 1)
cv2.imwrite('D:\\words\\final_removed.jpg',image)
在这个阶段之后;我正在应用腐蚀和膨胀
kernel = np.ones((3,3), np.uint8)
img_erosion = cv2.erode(255-gray, kernel, iterations=1)
img_dilation = cv2.dilate(img_erosion, kernel, iterations=1)
cv2.imwrite('D:\\words\\final_removed4.jpg',255-img_dilation)
我的问题是;去除水平线虽然去除了但单词有像素损失;并不是所有的水平线都被删除了。是否有一种新颖的方法可以最小化这种损失并删除所有水平线(这里 AGE 上方的水平线仍然存在)。
【问题讨论】:
-
降低 avg > 0.25 中的 0.25,以便 t 过滤掉较小长度的行。或过滤实际线长。删除线条后,您可以尝试打开形态学以填补文本中的空白。
-
是 OP detect_words.jpg 中的顶部图像还是其中的一部分?您绘制的白线的线条粗细似乎不足以完全擦除底线。遗憾的是线条粗细是一个整数,因此增加到 2 可能太多了。因此,您可能需要缩放整个图像,以使厚度 2 恰到好处。
标签: python image opencv image-processing line