Kom igång med OpenCV och Intel Edison (9 / 10 steg)
Steg 9: Exempel projekt: mönstermatchning Robot del 3
Matchande bilder
Flann = cv2. FlannBasedMatcher (index_params, search_params) < br > matchar = flann.knnMatch (des1, des2, k = 2)
Nu när vi har filtrerats bort kan listan över keypoints och beskrivningar dyka i FLANN matchande. FLANN står för snabb ungefärlig närmaste granne Sök. Det löser optimeringsproblem för att hitta liknande poäng. I detta fall vi foder i keypoints och beskrivningar finns i det sista steget i algoritmen och det matchar liknande poäng i de två bilderna. Ibland kommer datorn att dra förhastade slutsatser och matcha till skillnad från funktionen om du inte har din begränsningar rings upp i precis rätt.
Lowes förhållande
Dessa villkor är Lowes förhållandet. Skalning detta förhållande under 8 kommer vanligtvis bli av 90% av dina falska positiva matcher, i vår kod vi begränsa den lite längre.6 enligt kod här:
för m, n i matcher: < br > om m.distance < 0.6 * n.distance:
Good.append(m)
Plottning
Det sista steget är att generera en komplott för att visa hur är bilder match. Märka de gröna linjer mellan de två bilderna i fråga om den röda tröjan (som gråskala i bilden ovan). Detta innebär att vi har en match! Stora nyheter vi hittade rätt roboten. Nedan är koden som används för att generera den tomten. Tänk på att om du kör Edison headless kommer du vill spara till en bild eftersom det finns ingen skärm att skriva ut också.
draw_params = dict (matchColor = (0, 255, 0), # rita matcher i grön färg < br > singlePointColor = ingen,
matchesMask = matchesMask, # rita enda inliers
flaggor = 2)
img3 = cv2.drawMatches (img1, kp1, img2, kp2, bra, ingen, ** draw_params)