"Barcode" 从扫描图像读取

"Barcode" reading from scanned image

我想从我打印的扫描图像中读取条形码。图像格式不相关。我发现扫描的图像质量非常低,可以理解为什么普通条形码会失败。

我的想法是在打印的每页顶部创建一个非标准且非常简单的条形码。它将20 squares排成一个简单的二进制码Filled = 1, open = 0。它在 aA4 上足够大,便于检测。

在这个阶段我需要加载图像并找到顶部某处的条形码。它不会与扫描时完全位于同一位置。进入每个块并构建 ID。

任何知识或信息链接都很棒。

如果你能预设一个只包含代码的感兴趣区域,那么检测就很容易了。在这个区域扫描几条光线,找到 white/black 和 black/white 跃迁。然后,知道 "cells" 应该在哪里,你就知道它们的极性。

为此,您需要在两端用两个黑色框框住您的单元格,以确保知道它在哪里 starts/stops(如果比例固定,您可以只使用一个起始单元格,但我不会推荐这个)。

你可以看看https://github.com/zxing/zxing。我建议使用一维条码,但宽度足以匹配扫描仪的低分辨率。

您也可以发明自己的条形码编码并尝试自己解析它。粗条代表 1,细线代表 0。粗条代表 2 个白色像素和 4 个黑色像素。一条细线是 2 个白色像素、2 个黑色像素和 2 个白色像素。最后两个像素编码位值。 像素应该是扫描图像像素的大小。

然后您逐行处理图像扫描线,试图定位条形码。

我们通过将给定的像素值序列与模式进行比较来定位条形码。这是通过计算得分函数来执行的。差平方和是一个不错的选择。在计算分数时,我们忽略编码位值的两个像素。

当分数低于阈值时,我们找到了匹配模式。最好在编码值中添加奇偶校验位,以便检查其有效性。

计算滑动的平方和 window 可以优化。