1
votes

Existe-t-il un moyen plus rapide de juger si deux images sont différentes?

Je l'utilise pour dire si la capture d'écran est maintenant différente de la dernière capture d'écran. J'utilise maintenant

with open('last_screenshot.bmp','rb+') as f:
    org = f.read()
with open('now_screenshot.bmp','rb+') as f:
    new = f.read()
if(org==new):
    print("The pictures are same")

Y a-t-il un moyen plus rapide de le faire?


6 commentaires

Vous voulez savoir s'ils sont exactement les mêmes? Cela répond-il à votre question?: lien


Non, je pense que c'est la meilleure option!


Utilisez SSIM (indice de similarité structurelle) et vérifiez l'image de masque résultante. Jetez un œil à détecter et visualiser les différences entre deux images avec OpenCV Python pour un exemple


@nathancy Ceci est similaire à PIL.ImageChops.difference . Mais ce que je veux faire est de savoir s'ils sont différents au lieu de savoir où est différent entre eux. Merci pour la réponse.


@jizhihaoSAMA oui SSIM renvoie un masque de différence, vous pouvez donc vérifier le masque pour déterminer s'ils sont différents. S'il y a des pixels blancs sur le masque résultant, les deux images sont différentes. SSIM est une méthode possible qui peut vous aider à déterminer s'ils sont différents et où ils sont différents


Il est possible que la correspondance de modèles soit légèrement plus rapide, mais ` == `semble que ça devrait être bon.


3 Réponses :


0
votes

Eh bien, vous pouvez itérer les fichiers morceau par morceau au lieu de lire le tout en mémoire.

Vous pouvez également utiliser filecmp ou envoyer un shell à cmp (1) .


0 commentaires

0
votes

Vous pouvez utiliser filecmp.cmp (... , shallow = False) qui est livré avec la bibliothèque standard. Cela ne lira pas tous les fichiers en mémoire, mais lisez-les en morceaux et court-circuiter quand un morceau différent est rencontré. Exemple d'utilisation:

import filecmp

if filecmp('last_screenshot.bmp', 'now_screenshot.bmp', shallow=False):
    print('Files compare equal')


0 commentaires

1
votes

Vous n'irez nulle part en comparant les pixels. Vos options:

  1. extraire les fonctionnalités à l'aide du descripteur (HOG, SIFT, SURF, ORB), les faire correspondre, voir combien ont été mises en correspondance; exemple
  2. calculer les hachages, calculer la métrique de martelage voici l'exemple
  3. prenez un embedder pré-entraîné; quand il s'agit d'images, c'est assez facile, il suffit d'activer l'avant-dernier calque; il peut s'agir de la création, du vgg etc.

1 commentaires

Oh ... frérot, merci.Mais je pense que c'est peut-être un peu complexe.Cependant, vos idées me font beaucoup apprendre.