Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 进行OCR之前的预处理(tesseract、OpenCV)_C++_Opencv_Image Processing_Ocr_Tesseract - Fatal编程技术网

C++ 进行OCR之前的预处理(tesseract、OpenCV)

C++ 进行OCR之前的预处理(tesseract、OpenCV),c++,opencv,image-processing,ocr,tesseract,C++,Opencv,Image Processing,Ocr,Tesseract,为了使用OCR库tesseract获得更好的结果,我会进行一些预处理,但还不知道哪些步骤可以帮助我 我曾尝试使用因子15调整图像大小,并应用了自适应阈值(请参见图像),但这会导致出现“波浪”字符,而tesseract OCR库无法检测到这些字符。在底部,你可以通过Dropbox找到我的图片链接。原始图像大小为115x18px,字符高度为10px 我想从背景中提取角色。哪些步骤可以导致更好的结果?对于OCR部件,我是否应该使用另一个OCR库而不是tesseract?在使用tesseract进行

为了使用OCR库tesseract获得更好的结果,我会进行一些预处理,但还不知道哪些步骤可以帮助我

我曾尝试使用因子15调整图像大小,并应用了自适应阈值(请参见图像),但这会导致出现“波浪”字符,而tesseract OCR库无法检测到这些字符。在底部,你可以通过Dropbox找到我的图片链接。原始图像大小为115x18px,字符高度为10px

我想从背景中提取角色。哪些步骤可以导致更好的结果?对于OCR部件,我是否应该使用另一个OCR库而不是tesseract?在使用tesseract进行文本检测时,您通常有哪些经验?或者你更喜欢另一个图书馆,还是商业图书馆

更新19.6.15:

大津阈值提供了更好的结果作为自适应阈值。将在接下来的几天内更新其他答案

更新日期:2015年7月1日 有另一个示例图像,其中应使用tesseract识别序列号。由于字体很小,识别效果不是很好。你知道什么样的方法可以帮上忙吗


您可以尝试查找所有轮廓并删除面积较小的轮廓。

处理“wevy”角色可能更复杂。我现在唯一的想法是使用距离变换和阈值(使用二进制阈值)的结果(找到好的阈值可能并不简单-我会尝试使用规格化距离变换的maxValue*0.25)。

您可能想在第二张图像上尝试少量腐蚀和膨胀,这可能会消除角色中的一些波浪,侵蚀/膨胀的混合也会去除周围的小白点噪音,这总是有助于OCR

查看OpenCV文档,它将为您提供一些示例代码,帮助您入门,并解释其工作原理


希望这有帮助。

大津阈值在这里给了我更好的结果。结合距离变换和另一个阈值,我甚至得到了几乎可以通过
tesseract
识别的东西

这是我得到的结果:

6ANFK9PC)100'0-GT


为什么不干脆“削尖”(这样可以去除白边,缩小白线),然后简单地反转黑白?

好的,谢谢你的评论。正如信息所示,第二张图片(阈值图片)只是我自己处理原始图像的建议,但正如您所看到的“wevy”字符的结果。因此,我也很感兴趣,如果有处理步骤以更好的方式从原始图像中提取字符,尽管原始图像的质量不是很好。好的,谢谢,我会看看这一点,然后报告我的结果。你能提供openCV函数“distanceTransform”的使用属性吗你用的那个?我在这里并没有实际使用opencv,但我想它应该不是非常关键的参数。我的实现是用python/numpy/skimage实现的。距离变换后的重要部分是,我做了另一个只有白色像素的大津树,而不是整个变换图像。但是你可以尝试其他骨骼化技术,或者简单的腐蚀/最小过滤器。在我尝试了你的建议之后,我可以说,由于计算时间的原因,我不能使用复杂的距离变换。不幸的是,在我的例子中,应用OTSU treshold并使用二进制图像作为tesseract的输入并不能产生更好的识别效果。试着看看Hough变换函数这里有一些脚本可能有用。