Este é um tópico enorme, com respostas de três linhas de código a revistas de pesquisa inteiras.
Vou descrever as técnicas mais comuns e seus resultados.
Comparando histogramas
Um dos métodos mais simples e rápidos. Há décadas, proposto como um meio de encontrar semelhanças de imagens. A ideia é que uma floresta tenha muito verde e um rosto humano muito rosa, ou o que seja. Portanto, se você comparar duas fotos com florestas, obterá uma semelhança entre os histogramas, porque possui muito verde nas duas.
Desvantagem: é muito simplista. Uma banana e uma praia terão a mesma aparência, pois ambas são amarelas.
Método OpenCV: compareHist ()
Correspondência de modelos
Um bom exemplo aqui é matchTemplate, encontrando uma boa correspondência . Convolve a imagem de pesquisa com a que está sendo pesquisada. Geralmente é usado para encontrar partes menores da imagem em uma maior.
Desvantagens: só retorna bons resultados com imagens idênticas, mesmo tamanho e orientação.
Método OpenCV: matchTemplate ()
Correspondência de recursos
Considerada uma das maneiras mais eficientes de fazer a pesquisa de imagens. Vários recursos são extraídos de uma imagem, de forma a garantir que os mesmos recursos sejam reconhecidos novamente, mesmo quando girados, redimensionados ou inclinados. Os recursos extraídos dessa maneira podem ser comparados com outros conjuntos de recursos de imagem. Outra imagem que possui uma alta proporção dos recursos correspondentes à primeira é considerada representando a mesma cena.
Encontrar a homografia entre os dois conjuntos de pontos também permitirá que você encontre a diferença relativa no ângulo de disparo entre as imagens originais ou a quantidade de sobreposição.
Há uma série de tutoriais / exemplos de OpenCV sobre isso e um bom vídeo aqui . Um módulo OpenCV inteiro (features2d) é dedicado a ele.
Desvantagens: Pode ser lento. Não é perfeito.
No site de perguntas e respostas do OpenCV, estou falando sobre a diferença entre descritores de recursos, que são ótimos ao comparar imagens inteiras e descritores de textura, que são usados para identificar objetos como rostos humanos ou carros em uma imagem.