我正在研究ResultPoints,该函数返回与图像中的条形码相关的点。
对于QR码,ResultPoints返回一组4个点,它们是QR码每个角的四个方框的坐标。当我使用一个Barcode进行相同的实验时,它返回两个点,这两个点表示条形码的宽度。我如何找到该条形码的边界矩形呢?是否有办法可以使用ResultPoints数组计算条形码左上角和右下角的坐标呢?
经过一番研究,我发现了WhiteRectangleDetector类。这正是我感兴趣的东西,但当我开始尝试时,它给出了部分结果而不是确切的结果。我附上了使用WhiteRectangleDetector得到的结果图像,但正如我们所看到的,它只填充了条形码的中间部分,而不是整个矩形部分。所以我想知道是否能够将整个矩形部分涂色。
我的代码:
对于QR码,ResultPoints返回一组4个点,它们是QR码每个角的四个方框的坐标。当我使用一个Barcode进行相同的实验时,它返回两个点,这两个点表示条形码的宽度。我如何找到该条形码的边界矩形呢?是否有办法可以使用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");
}