如何使用"Zxing"读取长的“Code 39”条形码?

3
在我的应用程序中,我使用Zxing库来解码条形码。目标设备是"Motorola Xoom"和"三星"。我正在为这个应用程序开发的公司使用Code 39条形码来表示他们的产品。
Zxing可以很好地解码短条形码,但当我尝试解码长度较长的"Code 39"条形码时,它会一直尝试但没有结果。为了增加图像清晰度,我增加了扫描矩形区域的大小,这对三星手机来说是成功的,但对于摩托罗拉手机则不行。有没有办法让它在摩托罗拉手机上运行?任何反馈都将不胜感激。
1个回答

1
通常问题在于最小焦距的差异。也就是说,如果摩托罗拉设备无法聚焦得那么近,那么扩大矩形可能会使用户将条形码握得太近而无法聚焦。我会首先看这个问题。
否则,您需要改进此情况下的图像处理。挑战在于该应用程序执行简单的阈值处理,在常见情况下效果很好。但当您有密集的1D条形码,其条宽接近1像素时,它就会失效。因为每个像素都是黑色或白色,所以您会失去关于条形码位置的比例上很多细节。
如果这真的是问题,您可以考虑重写应用程序,使用相机的全分辨率捕获,而不是预览。在正常情况下,更高的分辨率并不能帮助;但在这些情况下可能会有所帮助。这样,您将无法拥有连续扫描应用程序。
我是条形码扫描器的开发人员之一,维护一个(付费)增强版本Barcode Scanner+。它具有不同的图像处理算法,可以在亚像素分辨率下找到边界,这对于这些代码更有效。您可能想看看它的表现--如果它表现良好,至少说明了更好的方法。我不能发送给您该代码,但如果您想调查这种类型的图像处理,我可以描述它的功能。

嗨,肖恩,感谢您如此详细的回复。如果这真的是问题所在,您可以考虑重写您的应用程序,使用相机的全分辨率捕获,而不是预览。我从中得到的是,您希望我使用完整的相机预览来扫描条形码,而不是使用指定高度和宽度的扫描矩形。如果是这样,我也尝试过了。但是在摩托罗拉的情况下也无法正常工作。此外,我不能转向任何其他读取条形码的解决方案,因为原型已经发布,现在我只能增强它,而不能更改它。 - Abdul Rehman
不,我的意思是使用API捕获一张图片,它比预览图像多100倍的像素。我不知道这是否会有所不同。这完全不同--例如,你不能用这种方式制作连续扫描应用程序。它将是一个点拍摄扫描模型,就像Goggles一样。 - Sean Owen
我有同样的问题。具体来说,我需要读取VIN号码。我增加了扫描矩形的宽度,但没有成功。我缩小了扫描高度,希望更少的像素=更多的处理。我还尝试调用InitiateScan()并传递一个包含CODE_39的单例集合,以便应用程序不必弄清楚我要求它扫描什么。有人修改过ZXing以使用全分辨率扫描吗? - Paul
我已经尝试调整扫描矩形大小,但老实说不知道函数**InitiateScan()的功能。后来我采用的解决方案是利用onTouchEvent()**提供的事件实现。这有所帮助,因为用户可以调整扫描矩形的大小并使其以减少噪点的方式调整,从而可以检索到结果。在运行时改变矩形大小会增加成功读取条形码的概率,可能需要尝试2或3个不同的分辨率,而不是使用相同的分辨率并等待几分钟。 - Abdul Rehman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接