Como posso verificar se há uma imagem em branco em Qt ou PyQt?
Pergunta
I geraram uma coleção de imagens. Alguns deles estão em branco como no seu fundo é branco. Eu tenho acesso ao objeto QImage de cada uma das imagens. Existe uma maneira Qt para verificar se há imagens em branco? Se não, alguém pode recomendar a melhor maneira de fazê-lo em Python?
Solução
Eu não sei sobre Qt, mas não há uma maneira fácil e eficiente de fazê-lo no PIL Usando o método getextrema , exemplo:
im = Image.open('image.png')
bands = im.split()
isBlank = all(band.getextrema() == (255, 255) for band in bands)
A partir da documentação:
im.getextrema () => 2-tuplo
Retorna a 2 tupla contendo o Os valores mínimos e máximos da imagem. Na versão atual do PIL, este só é aplicável a de banda única imagens.
Outras dicas
Bem, eu iria contar as cores da imagem. Se houver apenas um, em seguida, a imagem está em branco. Eu não sei o suficiente Python ou qt para escrever código para isso, mas eu tenho certeza que há uma biblioteca que pode dizer quantas cores existem em uma imagem (eu vou olhar em usar ImageMagick para este logo depois que eu postar isso) .
Update: Aqui está o código Perl (desculpas) para fazer isso usando imagem :: Magick . Você deve ser capaz de convertê-lo em Python utilizando o Python ligações .
Claramente, isso só funciona para imagens com base paleta.
#!/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__