使用opencv删除文本上的重叠线

问题描述 投票:0回答:2

我正在处理 4 个字母之间有一条线的图像。经过一些处理,我得到了这个结果:

我唯一做不到的就是去掉那条黑线,这样用一些OCR库识别就可以更清楚了。最终图像应如下所示(不损失文本质量):

我尝试放大图像,试图填补空白,但我失去了质量:

import cv2
from google.colab.patches import cv2_imshow
import numpy as np

image = cv2.imread("image.png", 0)
cv2_imshow(imagen2)

kernel = np.ones((0,0),np.uint8)
dilation2 = cv2.dilate(imagen2,kernel,iterations = 1) # to remove blackline noise
cv2_imshow(dilation2)

之后,我尝试侵蚀图像,但这效果不佳,而且我损失了更多质量:

kernel2 = np.ones((2,2),np.uint8)
closing = cv2.morphologyEx(dilation2, cv2.MORPH_CLOSE, kernel2)
cv2_imshow(closing)

python opencv image-processing ocr captcha
2个回答
0
投票

在不知道允许的字符形状的情况下,这简直是一项不可能完成的任务。因为从图像处理的角度来看,没有任何东西可以定性地区分一个字符和具有一条线交叉的相同字符。因此,任何删除细线的“盲目”处理也会破坏可以合法出现在文本中的细线,例如字符之间的空格,并且可能会使问题变得更糟。


0
投票

谢谢你的这篇文章!

我可以探索对图像应用腐蚀的选项,以有效去除字母上的重叠线,确保图像处理过程中的质量保持。

enter image description here

image = cv2.imread("captcha.png", 0)
cv2_imshow(image)

enter image description here

kernel3 = np.ones((2, 1), np.uint8) # Make changes in the kernel size to get better results
closing = cv2.morphologyEx(dilation2, cv2.MORPH_CLOSE, kernel3)
cv2_imshow(closing)

enter image description here

# To save the image
cv2.imwrite("new_captcha.png", dilation2)
© www.soinside.com 2019 - 2024. All rights reserved.