我已经生成了一系列图片。其中一些是空白的,因为它们的背景是白色的。我可以访问每个图像的QImage对象。是否有Qt方法来检查空白图像?如果没有,有人可以推荐在Python中使用它的最佳方法吗?
答案 0 :(得分:5)
我不知道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 :(得分:1)
好吧,我会计算图片中的颜色。如果只有一个,则图像为空白。我不知道足够的Python或qt为此编写代码,但我确信有一个库可以告诉你图像中有多少颜色(我发布之后我会考虑使用ImageMagick)
更新:以下是使用Image::Magick执行此操作的Perl代码(道歉)。您应该能够使用Python bindings将其转换为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__