我正在尝试使用 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在此处和此处所推荐的那样。如果我以编程方式将此图像转换为黑白图像并将图像裁剪为仅在其周围有一些空白区域的绑定条形码,那么 ZXing 可以完美地处理这样的图像。但问题是实际的条形码可能会有很小的变形,所以我的简单算法无法帮助我正确裁剪图像。更多的条形码可能不完全位于图像的中心,并且冷的亮度略有不同。我看到线程提到 OpenCV 功能,以找出图像上特定对象的位置,就像这个, 但他们已经很老了。从那以后有什么变化吗?在我的具体情况下,我还应该考虑编写 100% 可靠的数据矩阵解码器(和检测器)吗?
我决定提供由对应对象的 .toString() 文本输出制成的 LuminanceSource 和 BinaryBitmap 图像以供参考: http ://s28.postimg.org/l53sykhx9/Binary_Bitmap.png
和 /65z0vlbpl/Luminance_Source.png (在同一域中)。它们看起来不错并准备好解码,但解码有什么问题。
毕竟这些图像和类似的图像都可以通过智能手机软件很好地识别和解码,我只是希望获得相同的结果。