2017-03-13 3 views
0

Ich versuche matchTemplate Funktion zu verwenden, um Firmenlogo in source image.so zu finden, ich bezog mich this.Finden Sie alle Übereinstimmungen über OpenCV 2

Aber mein Problem ist:

Das Quellbild kann viele der fast gleichen Logos enthält, die die Vorlage abgestimmt ist, und einige andere Firmenlogo (nicht angepasste).

Wie finden Sie alle Treffer nicht nur die beste Übereinstimmung, genau wie detectMultiScale, die Ausgabe in einem Vektor geben.

Antwort

2

Führen Sie das Template-Matching in einer While-Schleife aus, wobei Sie als Bedingung gefragt werden, ob eine Übereinstimmung gefunden wurde oder nicht (mit einem gewissen Sicherheitsschwellenwert). Am Ende jeder Schleife speichern Sie die Übereinstimmung und maskieren Sie den Bereich aus, so dass er nicht wieder gefunden wird. Wenn die Gewissheit unter das Niveau fällt, brechen Sie aus der Schleife aus.

Pseudo-Code:

while true: 
    maxLoc, maxVal = template_matching() # perform the matching 
    if(maxVal < threshold) # check if it is a good match and break if not 
     break 
    list.append(maxLoc) # save the location of a good match 
    mask_out(src, (maxLoc.x + template.cols , maxLoc.y + template.rows)) # mask out the area, so that it's not found again 

draw_all_rectangles(list) 

Denken Sie daran, dass je nach verwendetem Verfahren Template-Matching, entweder Sie MINVAL und MINLOC oder MAXVAL und MAXLOC verwenden. Mit minVal wird die Bedingung das entgegengesetzte Ungleichungssymbol verwenden. Ich überlasse die Implementierung Ihnen. Viel Glück.

+0

klar erklärt, jetzt kann ich das auch verwenden: D –

Verwandte Themen