OpenCV est une bibliothèque open source puissante et hautement optimisée développée et publiée sous la licence BSD à 3 clauses. Il est disponible pour plusieurs plates-formes (Linux, macOS, ios, windows et android) et prend en charge plusieurs langages (C++, Java et python), il est très polyvalent. C’est l’une des meilleures méthodes pour comparer deux images et mettre en évidence les différences à l’aide de Python.

Il a été développé pour l’apprentissage automatique, le traitement d’images, la reconstruction 3D, la détection d’objets, etc., mais il joue aujourd’hui un rôle majeur dans les applications en temps réel, ce qui est très important à cette époque. vidéos, identifier des objets et même il peut faire la différence dans l’écriture manuscrite ou deux images très similaires. Les applications OpenCV ne sont limitées que par notre imagination.

Dans cet article, nous allons utiliser le package OpenCV et l’utiliser pour comparer deux images et mettre en évidence les différences à l’aide de Python.

Par exemple, prenons ces deux captures d’écran de page Web :

1.png

2.png

Dans la première image, nous avons 3 articles et dans la seconde, nous avons 6 articles. Nous allons mettre en évidence et trouver la différence entre ces deux captures d’écran en utilisant OpenCV. Nous allons maintenant supposer que nous avons deux de ces captures d’écran de pages Web quelque part dans notre mémoire système.

Il y a 2 éléments fondamentaux que nous devons garder à l’esprit :

  1. Les deux images doivent avoir la même taille et les mêmes canaux.
  2. Chacun des pixels doit avoir la même valeur.

Nous pouvons le faire en sept étapes :

  • Charger l’image d’origine et la seconde
  • Vérifiez la taille des images
  • Trouver ce qui est différent entre deux images
  • Convertissez-les en niveaux de gris
  • Augmenter la taille des différences
  • Trouver les compteurs pour les changements
  • Boîte d’affichage autour des modifications

Procédure

Tout d’abord, nous allons charger les images dans le système ou le logiciel que nous allons utiliser pour cette opération, vous pouvez utiliser ce que vous préférez, il y a beaucoup d’IDE sur le Web comme PyCharm, Microsoft visual studio code, Eclipse, etc. ils sont tous bons, vous pouvez utiliser n’importe lequel d’entre eux. Vous pouvez utiliser un autre langage de programmation pour effectuer cela, mais dans ce didacticiel, nous allons utiliser python. C’est un langage très convivial et de niveau débutant. La plupart des gens commencent à apprendre la programmation avec ce langage et il contient de nombreuses bibliothèques que nous pouvons utiliser.

Commençons maintenant le processus :

Commençons par vérifier s’ils ont la même taille et les mêmes canaux. si les deux images ont la même taille et les mêmes canaux, nous devons continuer l’opération, si les deux images n’ont pas la même taille et les mêmes canaux, elles ne sont pas égales.

Si les deux images ont les mêmes tailles et canaux, nous pouvons procéder en les soustrayant. L’opération cv2.subtract(image1,image2) au lieu d’une opération arithmétique et soustrait simplement chaque pixel de la première image à la valeur du pixel correspondant dans la deuxième image.

Commençons maintenant à coder :

Conditions préalables

  • Paquet OpenCV
  • Connaissance de Python

Étape – 1 : Installation du package

Ouvrez maintenant le terminal et installez les packages requis à l’aide des commandes ci-dessous :

python3 -m pip install imutils
python3 -m pip install opencv-python

Étape 2 : Importation des dépendances

Ouvrez maintenant votre éditeur de code préféré et collez le code ci-dessous :

import cv2
import imutiimls 

Ensuite, nous devons importer les bibliothèques requises, y compris openCV ainsi que les utilitaires. Nous pouvons facilement installer imutils à l’aide de la commande « pip install imutils ».

#get the images you want to compare.
original = cv2.imread("1.png")
new = cv2.imread("2.png")
#resize the images to make them small in size. A bigger size image may take a significant time
#more computing power and time
original = imutils.resize(original, height = 600)
new = imutils.resize(new, height = 600)

Après cela, nous devons lire les images de la mémoire système, nous devons nous assurer que les deux images sont placées dans le même dossier que le code que nous écrivons, sinon vous devez fournir le chemin d’accès des images. Une fois les images entièrement chargées, nous devons redimensionner les images à une taille plus gérable (élevée = 960 pixels dans ce cas). Maintenant, nous pouvons également travailler avec les images originales elles-mêmes, bien que parfois les images soient de très grande taille, c’est pourquoi le traitement des images peut prendre beaucoup plus de temps.

 #create a copy of original image so that we can store the
 #difference of 2 images in the same on
 diff = original.copy()
 cv2.absdiff(original, new, diff)
 

Étape 3 : convertir l’image en niveaux de gris

Maintenant, nous devons utiliser la fonction absdiff qui aide à trouver la différence absolue entre les pixels des deux tableaux d’images. Avec l’aide de cette fonction, nous pourrons calculer la différence exacte par élément entre deux tableaux. La différence est renvoyée dans le troisième argument.


 #converting the difference into grayscale images
 gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
  
 #increasing the size of differences after that we can capture them all
 for i in range(0, 3):
     dilated = cv2.dilate(gray.copy(), None, iterations= i+ 1)
 

Dans cette section du code, nous convertissons d’abord les images en niveaux de gris qui aident à rendre et à appliquer différents types d’opérations sur les images très facilement, puis nous appliquons l’opération morphologique (les opérations morphologiques sont un large ensemble d’opérations de traitement d’image qui peuvent traiter les images numériques images en fonction de leurs formes et tailles.) sur les images pour fusionner le pixel ensemble, car nous ne sommes pas vraiment intéressés par la différence exacte mais nous sommes vraiment intéressés par la région de différence sur les images.

 
 #threshold the gray image to binary it. Anything pixel that has
 #value higher than 3 we are converting to white
 #(remember 0 is black and 255 is exact white)
 #the image is called binarised as any value lower than 3 will be 0 and
 # all of the values equal to and higher than 3 will be 255
 (T, thresh) = cv2.threshold(dilated, 3, 255, cv2.THRESH_BINARY)
  
 # now we have to find contours in the binarized image
 cnts = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
 cnts = imutils.grab_contours(cnts)
 

En ligne cinq, nous seuillons l’image en niveaux de gris dilatée pour la binariser. Tout pixel qui a une valeur supérieure à trois que nous convertissons en blanc (nous devons nous rappeler que la valeur de pixel 0 est noir et 255 est exactement blanc) et l’image est appelée binarisée car toute valeur inférieure à 3 sera 0 et toutes les valeurs similaires à et supérieur à 3 sera converti en 255. Après cela, nous pouvons utiliser la fonction OpenCV pour trouver les contours sur l’image binarisée.


 for c in cnts:
     # nicely fiting a bounding box to the contour
     (x, y, w, h) = cv2.boundingRect(c)
     cv2.rectangle(new, (x, y), (x + w, y + h), (0, 255, 0), 2)
  
 #remove comments from below 2 lines if you want to
 #for viewing the image press any key to continue
 #simply write the identified changes to the disk
 cv2.imwrite("changes.png", new)
 

Sortir

Dans le premier de la syntaxe, nous parcourons tous les contours que nous avons trouvés dans l’image et nous pouvons essayer de trouver les boîtes englobantes rectangulaires de couleur verte pour les mêmes images. Sur la troisième ligne de la syntaxe, nous devons faire des rectangles de couleur verte sur les boîtes englobantes vertes et enfin, nous pouvons enregistrer l’image sur le disque sur la dernière ligne de la syntaxe. Ces rectangles verts vous aideront à comparer deux images et à mettre en évidence les différences à l’aide de Python. Facile non ?

Derniers mots

C’est ainsi que vous pouvez comparer deux images et mettre en évidence les différences à l’aide de Python. Faites-nous savoir si vous avez des questions/commentaires à ce sujet. La comparaison n’est que la première étape dans le monde du traitement d’image, vous pouvez faire beaucoup plus avec OpenCV.

Voici quelques tutoriels utiles que vous pouvez lire :