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):
So bin ich etwas zu tun, ist hier falsch? Wie kann die Begrenzungsbox des Barcodes korrekt berechnet werden?
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
@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
Da ich es nicht wirklich geschafft habe eine _solution_ zur Verfügung zu stellen, mach dir keine Sorgen um das Kopfgeld. – mindriot