gpt4 book ai didi

barcode - ZXing:寻找条码的边界矩形

转载 作者:行者123 更新时间:2023-12-04 20:43:38 28 4
gpt4 key购买 nike

我正在试验 ResultPoints,它返回与图像中条形码相关的点。
对于二维码,ResultPoints 返回一组 4 个点,它们是二维码每个角的四个框的坐标。
当我对条码进行同样的实验时,它返回两个点,表示条码的宽度。
如何找到条形码的边界矩形?
有什么方法可以使用 ResultPoints 数组计算条形码左上角和右下角的坐标?

经过一番研究,我找到了 WhiteRectangleDetector 类。这正是我感兴趣的东西,但是当我开始玩弄它时,它给了我部分结果但不是确切的结果。
我附上了一张使用 WhiteRectangleDetector 获得的结果的图像,但正如我们所见,它只是为条形码的中间部分着色,而不是条形码的整个矩形部分。所以我想知道我是否能够遮蔽条形码的整个矩形部分。

我的代码:

        barcodeBitmap = (Bitmap)Bitmap.FromFile("barcode-image.png");
var luminanceSource = new ZXing.BitmapLuminanceSource(barcodeBitmap);
var binarizer = new ZXing.Common.HybridBinarizer(luminanceSource);
var bitMatrix = binarizer.BlackMatrix;

var whiterect = WhiteRectangleDetector.Create(bitMatrix);

ResultPoint[] whiterectpts = whiterect.detect();
if (whiterectpts != null)
{
Console.WriteLine("\nWhiteRectangleDetector\n");
foreach (var w in whiterectpts)
{
Console.WriteLine(w);
}
Rectangle whiterectangle = new Rectangle((int)whiterectpts[0].X, (int)whiterectpts[0].Y, (int)(whiterectpts[2].X - whiterectpts[1].X), (int)(whiterectpts[1].Y - whiterectpts[0].Y));
img = Image.FromFile("barcode-image.png");
g = Graphics.FromImage(img);
g.DrawRectangle(pen, whiterectangle);
img.Save("crop2.png");
}

Image after cropping

最佳答案

通过 ResultPoints,您可以获得条码的侧面。通过 WhiteRectangleDetector (WRDet),您可以获得顶部的 y 坐标和条形码的高度。将所有这些信息放在一起将为您提供确切的坐标!

明确分解:

  • left-top:来自 WRDet 的 top 的 y 值,通过最左边的 ResultPoint
  • 的 x 值
  • 右上:来自 WRDet 的顶部的 y 值,通过最右侧 ResultPoint
  • 的 x 值
  • 左下:来自 WRDet 的顶部 y 值 + 来自 WRDet 的高度,x 值来自最左边的 ResultPoint
  • 右下:来自 WRDet 的顶部 y 值 + 来自 WRDet 的高度,x 值来自最右侧的 ResultPoint

  • 调用 ResultPoints 和调用 WRDet 似乎有些矫枉过正,但如果初始搜索中心在条形码内部,则 WRDet 算法非常快。可以使用以下构造函数修改初始搜索中心:
    public WhiteRectangleDetector(BitMatrix image, int initSize, int x, int y)

    您知道 x 应该位于左右 ResultPoint 之间,对于 y 值,您可以选择 ResultPoints 之一的 y 值。

    顺便说一句,这里是关于为什么 WhiteRectangleDetector 只捕获水平分数的简短解释。有一个初始矩形,它沿四个边扩展,直到上面不再有黑点。顶部和底部是正确的,而在一维条形码中,白条阻止算法进一步搜索。

    WhiteRectangleDetector 更适用于 2D 代码(代码的整个高度没有垂直的白条),当然前提是您知道将初始搜索中心放在哪里。

    关于barcode - ZXing:寻找条码的边界矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21544324/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com