172 votes

Vérification de la similitude des images avec OpenCV

OpenCV prend-il en charge la comparaison de deux images, en renvoyant une valeur (peut-être un pourcentage) indiquant la similitude de ces images? Par exemple, 100% seraient renvoyés si la même image était transmise deux fois, 0% seraient renvoyés si les images étaient totalement différentes.

J'ai déjà lu beaucoup de sujets similaires ici sur StackOverflow. J'ai aussi fait pas mal de recherches sur Google. Malheureusement, je n'ai pas pu trouver de réponse satisfaisante.

36voto

Kiran Points 176

Pour faire correspondre des images identiques (même taille / orientation)

 // Compare two images by getting the L2 error (square-root of sum of squared error).
double getSimilarity( const Mat A, const Mat B ) {
if ( A.rows > 0 && A.rows == B.rows && A.cols > 0 && A.cols == B.cols ) {
    // Calculate the L2 relative error between images.
    double errorL2 = norm( A, B, CV_L2 );
    // Convert to a reasonable scale, since L2 error is summed across all pixels of the image.
    double similarity = errorL2 / (double)( A.rows * A.cols );
    return similarity;
}
else {
    //Images have a different size
    return 100000000.0;  // Return a bad value
}
 

La source

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X