C'est un sujet énorme, avec des réponses de 3 lignes de code à des magazines de recherche entiers.
Je décrirai les techniques les plus courantes et leurs résultats.
Comparaison d'histogrammes
Une des méthodes les plus simples et les plus rapides. Proposé il y a des décennies comme un moyen de trouver des similitudes d'image. L'idée est qu'une forêt aura beaucoup de vert et un visage humain beaucoup de rose, ou autre. Donc, si vous comparez deux images avec des forêts, vous obtiendrez une certaine similitude entre les histogrammes, car vous avez beaucoup de vert dans les deux.
Inconvénient: c'est trop simpliste. Une banane et une plage se ressembleront, car les deux sont jaunes.
Méthode OpenCV: compareHist ()
Correspondance de modèle
Un bon exemple ici matchTemplate trouvant une bonne correspondance . Il convolve l'image de recherche avec celle dans laquelle la recherche est effectuée. Il est généralement utilisé pour trouver des parties d'image plus petites dans une plus grande.
Inconvénients: il ne renvoie que de bons résultats avec des images identiques, même taille et même orientation.
Méthode OpenCV: matchTemplate ()
Correspondance des fonctionnalités
Considéré comme l'un des moyens les plus efficaces de rechercher des images. Un certain nombre de caractéristiques sont extraites d'une image, de manière à garantir que les mêmes caractéristiques seront reconnues à nouveau même lorsqu'elles sont tournées, mises à l'échelle ou inclinées. Les caractéristiques extraites de cette manière peuvent être comparées à d'autres ensembles de caractéristiques d'image. Une autre image qui présente une proportion élevée d'éléments correspondant à la première est considérée comme représentant la même scène.
Trouver l'homographie entre les deux ensembles de points vous permettra également de trouver la différence relative d'angle de prise de vue entre les images originales ou la quantité de chevauchement.
Il existe un certain nombre de tutoriels / exemples OpenCV à ce sujet, et une belle vidéo ici . Tout un module OpenCV (features2d) lui est dédié.
Inconvénients: cela peut être lent. Ce n'est pas parfait.
Sur le site OpenCV Q&A , je parle de la différence entre les descripteurs de caractéristiques, qui sont excellents pour comparer des images entières et des descripteurs de texture, qui sont utilisés pour identifier des objets comme des visages humains ou des voitures dans une image.