Как я могу проверить наличие пустого изображения в Qt или PyQt? - PullRequest
4 голосов
/ 10 июля 2009

Я создал коллекцию изображений. Некоторые из них пустые, так как на их фоне белый цвет. У меня есть доступ к объекту QImage каждого из изображений. Есть ли способ Qt проверить наличие пустых изображений? Если нет, может кто-нибудь порекомендовать лучший способ сделать это в Python?

Ответы [ 2 ]

5 голосов
/ 10 июля 2009

Я не знаю о Qt, но есть простой и эффективный способ сделать это в PIL Используя метод getextrema , пример:

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

Из документации:

im.getextrema () => 2-кортеж

Возвращает 2-кортеж, содержащий минимальные и максимальные значения образ. В текущей версии PIL, это применимо только к одноканальной изображения.

1 голос
/ 10 июля 2009

Ну, я бы посчитал цвета на изображении. Если есть только один, то изображение пустое. Я не знаю достаточно Python или qt, чтобы написать код для этого, но я уверен, что есть библиотека, которая может сказать вам, сколько цветов в изображении (я собираюсь изучить использование ImageMagick для этого сразу после публикации) .

Обновление: Вот код Perl (извинения), чтобы сделать это, используя Image :: Magick . Вы должны быть в состоянии преобразовать его в Python, используя привязки Python .

Очевидно, это работает только для изображений на основе палитры.

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