"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 可以优化。
我想从我打印的扫描图像中读取条形码。图像格式不相关。我发现扫描的图像质量非常低,可以理解为什么普通条形码会失败。
我的想法是在打印的每页顶部创建一个非标准且非常简单的条形码。它将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 可以优化。