ZXing: Finden des Begrenzungsrechtecks von Barcode

Ich habe mit ResultPoints experimentiert, das die Punkte zurückgibt, die sich auf den Barcode im Bild beziehen.
Für einen QR-Code gibt ResultPoints einen Satz von 4 Punkten zurück, die die Koordinaten der vier Felder an jeder Ecke des QR-Codes sind. Wenn ich dasselbe mit einem Barcode experimentiert habe, werden zwei Punkte zurückgegeben, die die Breite des Barcodes angeben. Wie finde ich das Begrenzungsrechteck des Barcodes? Kann ich die Koordinaten der linken oberen und rechten unteren Ecke des Barcodes mithilfe des ResultPoints-Arrays berechnen?

Nach ein wenig Recherche habe ich die Klasse WhiteRectangleDetector gefunden. Es war genau das, woran ich interessiert war, aber als ich anfing, damit herumzuspielen, gab es mir Teilergebnisse, aber keine genauen Ergebnisse. Ich habe ein Bild des Ergebnisses angehängt, das mit WhiteRectangleDetector erhalten wurde, aber wie wir sehen können, färbt es nur den mittleren Teil des Barcodes und nicht den gesamten rechteckigen Teil des Barcodes. Also habe ich mich gefragt, ob ich den gesamten rechteckigen Teil des Barcodes schattieren kann.

Mein Code:

        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");
        }

Bild nach dem Zuschneiden

Antworten auf die Frage(3)

Ihre Antwort auf die Frage