我想从我打印的扫描图像中读取条形码。图像格式不相关。我发现扫描的图像质量很低,可以理解正常条形码失败的原因。
我的想法是在每页打印的顶部创建一个非标准且非常简单的条形码。它将20 squares
连续形成一个简单的二进制代码。Filled = 1, open = 0
。它会在A4
上足够大,以便于检测。
在这个阶段,我需要加载图像并在顶部的某处找到条形码。它不会与扫描的位置完全相同。步入每个块并构建ID。
任何知识或信息链接都会很棒。
答案 0 :(得分:1)
如果您可以预设包含代码的感兴趣区域,那么检测非常简单。在该区域扫描几条光线,找到白/黑和黑/白过渡。然后,知道"细胞"应该是,你知道它们的极性。
为了实现这一点,你需要在两端用两个黑色框架构建你的单元格,以确保知道它的开始/停止位置(如果比例固定,你可以只使用一个起始单元格,但我会不推荐这个。)
答案 1 :(得分:1)
您可以查看https://github.com/zxing/zxing。我建议使用一维条码,但宽度足以匹配扫描仪的低分辨率。
您还可以创建自己的条形码编码并尝试自行解析。使用粗条表示1,细条纹表示0表示。粗条形图例如是2个白色像素,4个黑色像素。细线将是2个白色像素,2个黑色像素和2个白色像素。最后两个像素对比特值进行编码。 像素应该是扫描图像像素的大小。
然后,您将按扫描线处理图像扫描线,尝试找到条形码。
我们通过将给定的像素值序列与模式进行比较来找到条形码。这是通过计算得分函数来执行的。平方差的总和是一个很好的选择。在计算分数时,我们忽略编码比特值的两个像素。
当分数低于阈值时,我们找到了匹配的模式。最好将奇偶校验位添加到编码值,以便检查它的有效性。
可以优化计算滑动窗口上的平方和。