J'ai généré une collection d'images. Certains d'entre eux sont vides car dans leur fond est blanc. J'ai accès à l'objet QImage de chacune des images. Existe-t-il un moyen de vérifier les images vierges? Si non, quelqu'un peut-il recommander la meilleure façon de le faire en Python?Comment puis-je vérifier une image vide dans Qt ou PyQt?
Répondre
Je ne sais pas Qt, mais il est un moyen facile et efficace de le faire en PIL En utilisant la méthode getextrema, par exemple:
im = Image.open('image.png')
bands = im.split()
isBlank = all(band.getextrema() == (255, 255) for band in bands)
De la documentation:
im.getextrema() => 2-tuple
Retourne un 2-tuple contenant le valeurs minimales et maximales de l'image . Dans la version actuelle de PIL, , ceci s'applique uniquement aux images à bande unique .
Eh bien, je compterais les couleurs dans l'image. S'il n'y en a qu'un, l'image est vide. Je ne connais pas assez Python ou qt pour écrire du code pour cela mais je suis sûr qu'il y a une bibliothèque qui peut vous dire combien de couleurs il y a dans une image (je vais utiliser ImageMagick pour cela juste après avoir posté ceci) .
Mise à jour: Voici le code Perl (excuses) pour le faire en utilisant Image::Magick. Vous devriez être capable de le convertir en Python en utilisant le Python bindings. De toute évidence, cela ne fonctionne que pour les images à base de palette.
#!/usr/bin/perl
use strict;
use warnings;
use Image::Magick;
die "Call with image file name\n" unless @ARGV == 1;
my ($file) = @ARGV;
my $image = Image::Magick->new;
my $result = $image->Read($file);
die "$result" if "$result";
my $colors = $image->Get('colors');
my %unique_colors;
for (my $i = 0; $i < $colors; ++$i) {
$unique_colors{ $image->Get("colormap[$i]") } = undef;
}
print "'$file' is blank\n" if keys %unique_colors == 1;
__END__
Il y a une faute de frappe dans votre code, c'est en fait getextrema au lieu de getexterma et ça vérifie bien les blancs. –
@Thierry, merci d'avoir signalé cela. Fixé –