我在电视镜头中对字幕应用OCR。 (我正在使用Tesseact 3.x w / C ++)我试图将文本和背景部分拆分为OCR的预处理。
这是原始图片:
并且,预处理的图像:
OCR结果是:Sicemn clone
如上面所示的预处理图像,有一些"雾"留在信中,阻止OCR模块正常工作。
有没有办法认识到那些"雾"以编程方式删除或进行一些图像处理以从预处理的图像中删除/减少它?
由于预处理逻辑经过大量优化以处理不同的图像,我宁愿找到一种方法来清理"预处理的图像,而不是修改预处理的逻辑(因为优化到这个图片可以影响到其他图片)
非常欢迎任何建议。
更新
显然,sixela的答案很棒,并且适用于大多数情况。 它不起作用的情况是背景也包括相似的文字颜色
不工作案例:
结果示例:
看起来,高斯滤波器似乎在这类镜头中引起了问题。 这意味着,不同的镜头可能需要不同的方法。
答案 0 :(得分:1)
通过使用形态学操作和阈值处理,我设法获得了更清晰(不完美)的图像。
以下是:
我终于获得了以下图片
作为OCR结果,本文给出了这样的文字:“自从你不知道”
PS:这个结果当然可以通过调整参数(例如内核大小)来改进,但我希望它可以指导你。我在Python中使用OpenCv来快速尝试这些方法。
x
在此之后,我尝试使用此命令在Tesseract上输出图像:
import cv2
image = cv2.imread('./inputImg.png', 0)
imgBlur = cv2.GaussianBlur(image, (9, 9), 0)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
imgTH = cv2.morphologyEx(imgBlur, cv2.MORPH_TOPHAT, kernel)
_, imgBin = cv2.threshold(imgTH, 0, 250, cv2.THRESH_OTSU)
imgdil = cv2.dilate(imgBin, kernel)
_, imgBin_Inv = cv2.threshold(imgdil, 0, 250, cv2.THRESH_BINARY_INV)
cv2.imshow('original', image)
cv2.imshow('bin', imgBin)
cv2.imshow('dil', imgdil)
cv2.imshow('inv', imgBin_Inv)
cv2.imwrite('./output.png', imgBin_Inv)
cv2.waitKey(0)