2016-05-16 9 views
5

Wie bekomme ich die Bounding Box für ein bestimmtes Rechteck in ZBar?Erhalten Sie die Bounding Box des Barcodes mit ZBar

Derzeit berechne ich es aus dem location polygon mit diesem Code:

for(Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol) { 
    int pointsCount = symbol->get_location_size(); 
    for (int ii = 0; ii < pointsCount; ++ii) { 
     int x = symbol->get_location_x(ii); 
     int y = symbol->get_location_y(ii); 
     if (!ii) { 
      r.left = r.right = x; 
      r.top = r.bottom = y; 
     } 
     r.left = std::min(r.left, x); 
     r.right = std::max(r.right, x); 
     r.top = std::min(r.top, y); 
     r.bottom = std::max(r.bottom, y); 
    } 
    printf("rect(%d,%d,%d,%d), ", r.left, r.top, r.right, r.bottom); 
} 

Das funktioniert gut für einige Barcodes, aber ich habe ein bestimmtes Bild, wo ZBar korrekt den Barcode Text erkennt - es ist „CHECK“ - aber gibt 10 Punkte als das Positionspolygon zurück, die alle auf der rechten Ecke des Strichcodes liegen.

Hier ist, wie es aussieht sichtbar gemacht (zog ich die Punkte als Kreise):

enter image description here

So bin ich etwas zu tun, ist hier falsch? Wie kann die Begrenzungsbox des Barcodes korrekt berechnet werden?

+0

Der Dokumentationslink in Ihrem Post sagt, "das ist derzeit kein Polygon, sondern die Scan-Positionen, wo das Symbol entschlüsselt wurde". Wenn man [eines ihrer Beispielbilder] (https://sourceforge.net/p/zbar/screenshot/234713.jpg) anschaut, sieht es ähnlich aus wie in deinem Fall - es scheint, dass es keine Grenze ist, sondern eher eine Sammlung von Punkte bezogen auf den Extraktionsalgorithmus. Es scheint, du hast kein Glück ... – mindriot

+0

@mindriot Da die Bounty abläuft können Sie es als Antwort posten? Auf diese Weise kann ich Ihnen das Kopfgeld geben, Ihre Antwort ist gültig, auch wenn ich kein Glück habe. – sashoalm

+0

Da ich es nicht wirklich geschafft habe eine _solution_ zur Verfügung zu stellen, mach dir keine Sorgen um das Kopfgeld. – mindriot

Antwort

3

Der Dokumentationslink in Ihrem Post sagt: "Dies ist derzeit kein Polygon, sondern die Scan-Positionen, an denen das Symbol entschlüsselt wurde". Mit Blick auf one of their example images, sieht es ähnlich wie Sie in Ihrem Fall - es scheint, es ist überhaupt keine Grenze, sondern eine Sammlung von Punkten in Bezug auf den Ort, an dem der Extraktionsalgorithmus bestimmt, dass ein Symbol erfolgreich decodiert wurde. Aus der Dokumentation scheint es, dass Sie kein Glück haben, da es keine andere Funktionalität gibt, um geometrische Daten zu erhalten.

Während Ihre SO Frage keine nützlichen Antworten ergab, möchten Sie vielleicht die support links auf ihrer Website ausprobieren.

Verwandte Themen