c - 如何识别图像来自针式打印机

标签 c opencv tesseract

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

我的问题是,如果图像来自点阵打印输出,我需要以不同的方式预处理图像。有没有办法使用 OpenCV 来判断图像是从点阵打印输出扫描的?

我尝试过一次模糊图像并使用 AbsDiff 计算差异,这是我用来检测图像是否需要去斑的技术,但没有一致的结果表明点矩阵。

最佳答案

我有一些想法,并决定将它们放在 ImageMagick 中,但你同样可以使用 OpenCV 及其 findContours().

我用它作为输入图像:

enter image description here

如果您使用形态学稍微侵 eclipse 黑色区域(或者扩大白色,效果相同),每个点都会与相邻的点分开。如果您随后进行“连通分量分析”,您将看到图像具有异常大量的非常小的点,这些点的高度与宽度大致相同 - 圆形或点的特征。

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

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

输出是此图像,其中每个检测到的 Blob 都会获得逐渐变亮的白色阴影:

enter image description here

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

enter image description here

关于c - 如何识别图像来自针式打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56959738/

相关文章:

c - 为什么在下面的代码上出现段错误?

c - __stdcall 和 __cdecl 调用约定的函数名称的前导下划线是可选的吗?

c++ - C 中用 1 替换 0 的宏

heroku - 使用 Node.js 在 Heroku 上使用 Tesseract-OCR

c - 如何在while循环中清除 'segmentation fault (core dumped)'

c++ - 是什么导致 "OpenCV(4.0.1) Error : Assertion failed(m.dims <= 2)"

opencv - OpenCV 3.3中查找背景复杂、纹理丰富的图像中的轮廓

image - 检测图像上的硬币(并拟合椭圆)

python - pytesseract : FileNotFound

c++ - 将带有 OpenCV 边界框的图像传递给 tesseract OCR