ZXing库无法解码Datamatrix条形码

时间:2014-03-13 14:18:04

标签: java opencv zxing datamatrix

我正在尝试使用ZXing库来解码Datamatrix条形码。这是我的代码示例:

BufferedImage bi = img.getBufferedImage();

Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);

LuminanceSource source = new BufferedImageLuminanceSource(bi);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
DataMatrixReader dataMatrixReader = new DataMatrixReader();

try {
    Result res = dataMatrixReader.decode(bitmap,hints);
    System.out.println("resultText = "+res.getText());
} catch (Exception e) {
    System.out.println("failed to get resultText");
    e.printStackTrace();
}

我在https://stackoverflow.com/和其他网站上看到过几次相同的样本,但这种方法对我来说并不适合这种形式。

作为一个来源,我正在使用从红外摄像机抓取的图像。这是示例图像: enter image description here 如您所见,条形码几乎完全位于图片的中心,Sean Owen推荐herehere。如果我以编程方式将此图像转换为黑白并将图像剪裁为绑定条形码,仅在其周围有一些空白区域,那么ZXing可以与这样的图像完美配合。但问题是真实的条码可能会有很小的变形,所以我简单的算法无法帮助我正确裁剪图像。更多的条形码可能不是精确地放置在图像的中心,冷的亮度有点不同。我看到线程提到OpenCV功能,以找出图像上的物品对象的位置,如this one,但它们已经很老了。从那以后发生了什么变化?在我的特定情况下,我还应该考虑如何编写100%可靠的数据矩阵解码器(和探测器)?

我决定提供由相关对象的.toString()文本输出组成的LuminanceSource和BinaryBitmap图像供参考: http://s28.postimg.org/l53sykhx9/Binary_Bitmap.png enter image description here

和/65z0vlbpl/Luminance_Source.png(在同一个域中)。它们看起来很好并且已经准备好进行解码,但是解码时出了什么问题。

毕竟这个图像和类似的图像用智能手机软件很好地识别和解码,我只是希望获得相同的结果。

1 个答案:

答案 0 :(得分:-1)

您需要以编程方式或手动方式从设置中启用它。

在DecodeThread.java类中,您可以看到启用数据矩阵编码的行

decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS);