2009-07-10 7 views
4

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

5

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 .

+0

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. –

+0

@Thierry, merci d'avoir signalé cela. Fixé –

1

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__ 
Questions connexes