2009-07-10 5 views
4

Ich habe eine Sammlung von Bildern erstellt. Einige von ihnen sind leer, da in ihrem Hintergrund weiß ist. Ich habe Zugriff auf das QImage-Objekt von jedem der Bilder. Gibt es eine Möglichkeit, nach leeren Bildern zu suchen? Wenn nicht, kann jemand den besten Weg empfehlen, es in Python zu tun?Wie kann ich nach einem leeren Bild in Qt oder PyQt suchen?

Antwort

5

Ich weiß nicht, über Qt, aber es ist eine einfache und effiziente Art und Weise, es zu tun in PIL Mit dem getextrema Methode Beispiel:

im = Image.open('image.png') 
bands = im.split() 
isBlank = all(band.getextrema() == (255, 255) for band in bands) 

Aus der Dokumentation:

im.getextrema() => 2-Tupel

Gibt ein 2-Tupel mit dem 01 zurückMinimal- und Maximalwerte des Bildes . In der aktuellen Version von PIL, gilt dies nur für einbandige Bilder.

+0

Es gibt einen Tippfehler in Ihrem Code, es ist tatsächlich getextrema statt getexterma und es prüft auf Leerzeichen gut. –

+0

@ Thierry, danke für das darauf hin. Fest –

1

Nun, ich würde die Farben im Bild zählen. Wenn es nur einen gibt, ist das Bild leer. Ich weiß nicht genug Python oder qt, um Code dafür zu schreiben, aber ich bin mir sicher, dass es eine Bibliothek gibt, die dir sagen kann, wie viele Farben es in einem Bild gibt (ich werde mich später mit ImageMagick beschäftigen, nachdem ich dies gepostet habe) .

Aktualisierung: Hier ist der Perl-Code (Entschuldigung), dies zu tun mit Image::Magick. Sie sollten es in Python konvertieren können, indem Sie Python bindings verwenden.

Dies funktioniert eindeutig nur für palettenbasierte Bilder.

#!/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__ 
Verwandte Themen