我正在寻找一个用于读取数据矩阵代码的 C++ 库,特别是 ECC 200 代码(而不是 QR 代码)。我找到了 libdmtx和zxing。zxing 是java,但是好像有C++ 端口。有没有人有使用这些库或可能使用其他库阅读 ECC 200 代码的经验?
5 回答
ZXing 的 C++ 端口中的 DM 支持与 Java 是最新的(许多一维代码并非如此)。它在测试应用程序中默认不启用,但很容易启用(并且将来会默认启用。)
我没有任何实际使用 DM 解码器的个人经验,但它包含在测试套件中,我相信它可以在 Android 应用程序中使用。
那么这是一个真正的答案。我已经成功使用了 libdmtx 和 libzxing。Libdmtx 更直接,因为它仅限于数据矩阵。根据我的经验,奇怪的是,结果并不总是确定性的。Libzxing 也很好,但是当您进行实际生产(数百万或读数)时,由于内存管理不完美,它有时会崩溃。它真的很好,但对于真正的生产环境来说并不完美。
这两个库 libzxing 和 libdmtx 都要求您拥有图像的数据矩阵死点并且非常大。这意味着您需要自己进行预本地化。我设法通过仅使用图像例程并寻找“L”形状然后使用最小面积平方边界框等进行一些智能来做到这一点。然后我使用libzxing的解码和错误校正步骤本身,这仍然不是完美的。
如果您选择生产环境,要么在您自己的限制范围内自己做所有事情,如果您不喜欢这样做,请使用付费软件包,这反过来又不会完全适合您的应用程序并且需要花钱。
libzxing-cpp 的最佳端口是用户 glassenchidna 的端口。https://github.com/glassechidna/zxing-cpp
由于没有对我的问题发布“真实”答案,至少没有对这些库之一有阅读二维矩阵代码经验的人给出答案,我想我会发布自己的经验。
我尝试了这两个库,并且都可以读取代码,但是对于我的情况,性能还不够好。在我的情况下,代码通常不是“完美”的,点可能会丢失,大小不同,代码可能有点歪斜。这两个库在阅读这些代码时都有问题。
最后,我使用了一个商业(非免费)库Sapera。Sapera 能够更好地阅读不完美的代码。我使用 Sapera 是因为它过去曾在我的公司中使用过,但很有可能其他商业机器视觉库(如 Halcon)也表现良好。
我大量使用了 Halcon,包括解码 DataMatrix。我可以告诉你,它真的很好用。即使由于读取圆形物体或歪斜的印刷品而导致失真,它仍然能够在短时间内很好地读取它们。
唯一的缺点,也是一个很大的缺点,就是价格。运行时许可证非常昂贵,并且您需要开发许可证才能购买运行时许可证,这更加昂贵。除非您的项目有足够的资金,否则由于这个原因,这可能不是一个选择。祝你好运!