我想使用 tesseract 库通过手机识别里程表中的数字。 源图片:
下一步:
现在我需要填补每个部分之间的空白。 你能帮我吗,我该怎么做? (英语训练数据比 https://github.com/arturaugusto/display_ocr 更适合我)
image processing:
func prepareImage(sourceImage: UIImage) -> UIImage {
let avgLuminanceThresholdFilter = GPUImageAverageLuminanceThresholdFilter()
avgLuminanceThresholdFilter.thresholdMultiplier = 0.67
let adaptiveThresholdFilter = GPUImageAdaptiveThresholdFilter()
adaptiveThresholdFilter.blurRadiusInPixels = 0.67
let unsharpMaskFilter = GPUImageUnsharpMaskFilter()
unsharpMaskFilter.blurRadiusInPixels = 4.0
let stillImageFilter = GPUImageAdaptiveThresholdFilter()
stillImageFilter.blurRadiusInPixels = 1.0
let contrastFilter = GPUImageContrastFilter()
contrastFilter.contrast = 0.75
let brightnessFilter = GPUImageBrightnessFilter()
brightnessFilter.brightness = -0.25
//unsharpen
var processingImage = unsharpMaskFilter.imageByFilteringImage(sourceImage)
processingImage = contrastFilter.imageByFilteringImage(processingImage)
processingImage = brightnessFilter.imageByFilteringImage(processingImage)
//convert to binary black/white pixels
processingImage = avgLuminanceThresholdFilter.imageByFilteringImage(processingImage)
return processingImage
}
文字识别:
let tesseract_eng = G8Tesseract()
tesseract_eng.language = "eng"
tesseract_eng.engineMode = .TesseractOnly
tesseract_eng.pageSegmentationMode = .Auto
tesseract_eng.maximumRecognitionTime = 60.0
tesseract_eng.setVariableValue("0123456789", forKey: "tessedit_char_whitelist")
tesseract_eng.image = prepareImage(image)
tesseract_eng.recognize()
最佳答案
OpenCV 有一些形态学方法,白色填充黑色像素之间的间隙(如 THIS 或 THIS )。注意形态学开法,这应该是解决这个问题的主要方法,但如果这没有帮助,不要害怕将它与扩张结合起来。我不知道你用什么软件做图像处理,如果有类似的方法,试试看,否则我强烈建议你安装OpenCV,它(当然是免费的)有很多图像处理操作,速度非常快.此外,您可以尝试对阈值进行一些试验,并找到它切掉多少角和去除多少阴影之间的平衡(结合形态学操作,这应该可以为您解决问题)。
关于android - 如何填补7段字符每段之间的空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36718379/