我正在尝试使用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/和其他网站上多次看到几乎相同的示例,但这种方法在这种形式下对我不起作用。
作为一个来源,我使用从红外相机抓取的图像。以下是示例图像:
如您所见,条形码几乎恰好位于图像的中心,正如Sean Owen推荐的here和here一样。如果我以编程方式将此图像转换为黑白图像,并将图像裁剪为绑定的条形码,并且只在其周围留出一些空白,那么ZXing可以完美地处理这样的图像。但问题是,现实中的条形码可能会有很小的变形,所以我的简单算法无法帮助我正确地裁剪图像。更重要的是,条形码可能不会精确地放在图像的中心,并且条形码的亮度略有不同。我看到一些线程提到了OpenCV功能,以找出特定对象在图像上的位置,比如this one,但它们太老了。从那以后有什么改变了吗?在我的特定情况下,我应该考虑什么才能写出100%可靠的数据矩阵解码器(和检测器)?
我决定提供由校正对象的.toString()文本输出组成的LuminanceSource和BinaryBitmap图像以供参考:http://s28.postimg.org/l53sykhx9/Binary_Bitmap.png
和/65z0vlbpl/Luminance_Source.png (在相同的域中)。它们看起来很好,可以解码了,但是解码有什么问题呢?
毕竟,这个图像和类似的图像用智能手机软件识别和解码得很好,我只是想达到同样的效果。
发布于 2014-12-29 20:04:45
您需要通过设置以编程方式或手动方式启用它。
在类DecodeThread.java中,您可以看到启用数据矩阵编码的代码行
decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS);
https://stackoverflow.com/questions/22381421
复制相似问题