2014-04-08 2 views
6

OpenCV hat einige Tutorials, die sich mit dem Versuch befassen, Muster in einem Live-Video-Stream zu erkennen. Z. B .:Ich möchte OpenCV verwenden, um 2D-Barcodes in einem statischen Bild zu erkennen, aber die Dokumentation scheint es nicht zu bedecken

http://docs.opencv.org/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html

Aber das ist nicht wirklich das, was ich zu tun bin versucht. Ich habe statische Bilder wie .jpgs, , die 2D-Barcodes enthalten.

Mein Ziel ist es, einen oder mehrere 2D-Barcodes aus dem Bild zu isolieren. Wenn die JPG-Datei 1000 Pixel mal 500 Pixel groß ist und der 2D-Barcode nur 200 Pixel mal 200 Pixel groß ist, möchte ich das 200 x 200-Pixel-Beispiel nur in einer Ausgabedatei speichern.

Ich vermute, dass dies entweder eine Haar-Kaskade oder eine LBP-Kaskade erfordert. Ich vermute, dass Feature-Erkennung dies nicht möglich ist.

Ich kann jedoch keine Anleitungen finden, die dieses Problem beheben.

Weiter, die opencv-Distribution baut automatisch einige ausführbare Dateien auf, die ähnlich zu sein scheinen, wie opencv_perf_objdetect und opencv_test_objdetect, aber sie scheinen nicht mit den Tutorials oder irgendetwas anderem in der Dokumentation übereinzustimmen.

Frage: Ist das Problem, wie man Teilbilder in einem statischen Bild erkennt, irgendwo in der OpenCV-Dokumentation erklärt? Wenn ja, wo?

Danke.

+0

Bitte geben Sie ein Beispielbild ein – RobAu

Antwort

0

ehrlich gesagt ist das grundlegende Verfahren, um etwas mit einer Kaskade zu erkennen, einfach.

ist es egal, ob du ein Haar, ein Pfund oder ein Schwein hast, auch wenn du es auf Gesichtern, Bananen oder Barcodes trainierst, es wird einfach versuchen das Ding zu lokalisieren, an dem es trainiert wurde.

// first load the cascade 
string cascade_file = "my_barcode.xml"; 
CascadeClassifier cascade; 
if(!cascade.load(cascade_filee)){ printf("Error loading cascade\n"); return -1; }; 

// then we need a test image, should be grayscale (but will get converted internally if not) 
Mat img = imread("mybar.png", 0); // 0==>"load gray" 
if (img.empty()) { /* only fools don't check resource loading */ } 

// now we can check if it found something, we'll get a Rect for each found item: 
std::vector<Rect> rects; 
cascade.detectMultiScale(img, rects, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30)); 
for (size_t i = 0; i < rects.size(); i++) 
    // do something with rects[i] ... 
    // i.e. filter for the largest boundingRect() 
    // Mat subimg = img(rects[i]); // 'cropped' subimage 
+0

Wenn Sie sich nicht um die Details des Algorithmus kümmern, würde ich zbar vorschlagen. Es kam mit ein paar einfachen Beispielen. Es ist einfach zu verstehen und zu verwenden. – agodinhost

2

Ich habe kürzlich an einem Barcode-Erkennungsprojekt gearbeitet. Am Anfang nahm ich an, dass ein einfacher maschineller Lernalgorithmus in Kombination mit einem texturbasierten Deskriptor die Barcode-Erkennung auflösen kann. Ich habe jedoch einige Probleme festgestellt, weil ich im Falle meiner Anwendung nicht weiß, ob es einen Barcode gibt oder nicht, seine Größe, sein Typ (UPC-A, EAN ...), seine Ausrichtung ..., die viele Kombinationen ausprobiert um den Barcode zu lokalisieren.

Ich hatte auch nicht zur Verfügung oder habe die Zeit, einen Trainingsdatensatz entsprechend der Art der Bilder, die ich habe, zu erstellen, so dass ich nicht mit dieser Lösung fortfahren. Dann habe ich mehrere Artikel gelesen. Viele dedizierte Barcode-Erkennungsmethoden gehen von der Annahme aus, dass ein Barcode im Bild vorhanden ist, und versuchen daher, diesen zu finden. Darüber hinaus nehmen einige der Algorithmen an, dass der Strichcode horizontal ist, und verwenden diese Hypothese als a-priori-Information.

Die beste Lösung, die ich gefunden habe, ist BLaDE (http://www.ski.org/Rehab/Coughlan_lab/BLaDE/BLaDE_TechReport.pdf). Der Code ist auch im Internet verfügbar, so dass Sie ihn einfach testen können. Das einzige Problem ist, dass es nur für UPC-A-Barcodes entworfen wurde.

fortzusetzen, die beste Lösung für Sie zu verschiedenen Aspekten abhängt:

  • die Art von Barcode-

  • Sie sicher wissen, dass es ein Barcode ist

  • es Orientierung ist: irgendein/ein gegebener Winkel

  • Realzeitanwendung/Gerät, zum es zu laufen

  • Sie eines Trainings verfügen gesetzt

Viel Glück!

+0

Danke. Meine Situation erfordert 2D-Barcodes, die von vielen bestehenden Softwarelösungen nicht unterstützt werden. BLADE scheint nicht zu meiner Situation zu passen, aber vielleicht kann ich etwas anderes finden. – dataquerent

+0

Oh, Entschuldigung, ich habe die Erwähnung "2D" verpasst. – Raluca

Verwandte Themen