如何识别图像来自点阵打印机

时间:2019-07-09 19:57:03

标签: c opencv tesseract

我正在使用Tesseract使用Charles Weld C#包装器进行OCR字符识别。我正在使用Open CV预处理图像。

我的问题是,如果图像来自点矩阵打印输出,则需要对其进行不同的预处理。是否可以使用OpenCV判断图像是从点阵打印输出中扫描出来的?

我曾尝试使用AbsDiff对图像进行一次模糊处理并计算差异,这是我用来检测图像是否需要去斑点的技术,但没有可指示点矩阵的有效结果。

1 个答案:

答案 0 :(得分:1)

我有一些想法,决定将其放入 ImageMagick ,但是您也可以使用 OpenCV 及其findContours()来完成这种事情。 / p>

我用它作为输入图像:

enter image description here

如果使用形态略微腐蚀黑色区域(或者膨胀白色,这是同一件事),则每个点都将与相邻点分开。如果您随后进行“连接组件分析” ,您将看到图像中有异常大量的非常小的点,这些点的高度与宽度大致相同,这是圆或点的特征。

这是我在Terminal中用于运行 ImageMagick 的代码:

magick  dotmatrix.png -threshold 50% -morphology dilate disk:1 \
       -define connected-components:verbose=true               \
       -connected-components 8 -auto-level result.png

输出是此图像,其中每个检测到的斑点都获得连续变亮的白色阴影:

enter image description here

更有趣的是详细输出,在图像中检测到的每个斑点都有一行输出。它显示了许多小的2x2、3x2和类似大小的点,其面积约7像素,并用红色圆圈圈出。我将以此为基础探索更多...

enter image description here