【发布时间】:2014-04-18 08:27:35
【问题描述】:
我正在尝试使用 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/ 和其他网站上多次看到几乎相同的样本,但这种方法不适用于这种形式的我。
作为来源,我使用的是从 IR 相机抓取的图像。这是示例图像: 如您所见,条形码几乎正好位于图像的中心,正如Sean Owen 推荐的here 和here。如果我以编程方式将此图像转换为黑白图像并将图像裁剪为仅在其周围有一些空白区域的绑定条形码,那么 ZXing 可以完美地处理这样的图像。但问题是实际的条形码可能会有很小的变形,所以我的简单算法无法帮助我正确裁剪图像。更多的条形码可能不完全位于图像的中心,并且冷的亮度略有不同。我看到线程提到 OpenCV 功能来找出图像上特定对象的位置,比如this one,但它们已经很老了。从那以后有什么变化吗?在我的具体情况下,我应该考虑编写 100% 可靠的数据矩阵解码器(和检测器)吗?
我决定提供由对应对象的 .toString() 文本输出制成的 LuminanceSource 和 BinaryBitmap 图像以供参考: http://s28.postimg.org/l53sykhx9/Binary_Bitmap.png
和 /65z0vlbpl/Luminance_Source.png(在同一个域中)。它们看起来不错,可以解码,但解码有什么问题。
毕竟这些图像和类似的图像都可以通过智能手机软件很好地识别和解码,我只是希望获得相同的结果。
【问题讨论】:
-
链接:s28.postimg.org/65z0vlbpl/Luminance_Source.png 已损坏,如果您认为相关,请考虑修复它。
标签: java opencv zxing datamatrix