如何使用ZXing获取QR码的坐标?

4

我可以使用ZXing库获取QR码的值,但我还需要QR码角点的坐标。如何访问这些坐标。

1个回答

5

我不确定您要提取哪个角的坐标,但我非常确定您可以从Result.getResultPoints()方法获得的结果点计算它们。

例如,对于以下图像(200x200像素)和代码片段:

QRCode

BufferedImage image = ImageIO.read(new File("QRCode-1.png"));
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
        new BufferedImageLuminanceSource(image)));
Reader reader = new QRCodeReader();
Result result = reader.decode(binaryBitmap);
System.out.println("text: " + result.getText());
ResultPoint[] resultPoints = result.getResultPoints();
System.out.println("resultPoints:");
for (int i = 0; i < resultPoints.length; i++) {
    ResultPoint resultPoint = resultPoints[i];
    System.out.print("  [" + i + "]:");
    System.out.print(" x = " + resultPoint.getX());
    System.out.print(", y = " + resultPoint.getY());
    if (resultPoint instanceof FinderPattern)
        System.out.print(", estimatedModuleSize = "
                + ((FinderPattern) resultPoint).getEstimatedModuleSize());
    System.out.println();
}

我得到了这个输出:
text: Hello World!
resultPoints:
  [0]: x = 36.5, y = 162.5, estimatedModuleSize = 9.0
  [1]: x = 36.5, y = 36.5, estimatedModuleSize = 9.0
  [2]: x = 162.5, y = 36.5, estimatedModuleSize = 9.0

xy是正方形查找图案的中心坐标。 知道QR码查找图案的大小为7x7模块, 您可以轻松计算出角落坐标。


当QR码占据图像的大部分时,此代码运行良好。我想要扫描的QR码位于页面的左上角,并且不是很大,因此该代码无法检测到它。您能否提供一些解决方案? - Prakhar Ganesh
@PrakharGanesh 现在这是一个完全不同的问题。 当你添加 TRY_HARDER 解码提示时,也许你的 QRCodeReader 会更好用。 - Thomas Fritsch
估计模块大小代表什么?这个 QR 码上的正方形非常对称,但我发现有些 QR 码的方格查找器比它们之间的空间小。在那种情况下,我不太确定如何找到角落,我想估计的模块大小可能会有所帮助,但是怎样呢? - delkant
1
@delkant “模块”是QR码的小基本黑色或白色正方形。在示例图像中,每个模块的大小为9x9个图像像素。(只需在图像编辑器中打开图像并计算像素即可。) - Thomas Fritsch
还有一点需要注意,查找图案的宽度比为1:1:3:1:1(黑色与白色)。也就是说,中心的黑色正方形宽度为3*moduleSize像素。 - zhy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接