2016-05-18 4 views
0

Ich verwende OpenCV, um das ANPR-Programm zu implementieren.Wie die Nummern im Nummernschild zu extrahieren?

Ich habe versucht, die Zahlen in der Platte zu extrahieren. Der Beispielcode ist unter

adaptiveThreshold(src_gray, binary_image, THESHOLD_MAX, ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY_INV, BLOCK_SIZE, MEAN_OFFSET); 

CvBlobs blobs; 
IplImage binary = binary_image; 
IplImage *labelImg = cvCreateImage(cvGetSize(&binary), IPL_DEPTH_LABEL, 1); 
unsigned int result = cvLabel(&binary, labelImg, blobs); 
cvReleaseImage(&labelImg); 
cvFilterByArea(blobs, DETECT_BLOB_AREA_MIN, DETECT_BLOB_AREA_MAX); 

Alles fast in Ordnung ist mit der adaptiveThreshold() und `cvlabel(), jedoch gibt es einige Bilder dem Ausgang von adaptiveThreshold() geben ist nicht gut, die folgende ist ein Beispiel.

enter image description here

Es gibt 3 Buchstaben, die in der Platte (die mit den roten Rechtecken begrenzt sind).

dort 3 Buchstaben kann nicht mit cvLabel() erkennen, weil sie Stick mit Platte gebunden sind. In diesem Fall kann mein Algorithmus diese Buchstaben nicht extrahieren.

Jemand sagen mir, es gibt eine Möglichkeit, diese 3 Buchstaben in diesem Fall zu extrahieren?

Vielen Dank!

Antwort

1

Sie können Erodieren verwenden. Erosion kann einen Teil des Bildes entfernen. Es ist sehr wahrscheinlich, dass die Erosion den Verbindungsteil zwischen Platte und Brief entfernen kann. http://docs.opencv.org/2.4/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.html http://homepages.inf.ed.ac.uk/rbf/HIPR2/erode.htm

+0

danke! Ich habe versucht, Erosion zu verwenden, es ist in Ordnung für dieses Bild mit dem richtigen Parameter. Aber es macht einige Vordergrundpixel anderer Blobs verloren, also ist es nicht gut, sich für diesen Fall zu bewerben. Noch ein Vorschlag für mich? Vielen Dank! – TTGroup

Verwandte Themen