2009-07-10 110 views
4

我已经生成了图像集合。其中一些是空白的,因为它们的背景是白色的。我可以访问每个图像的QImage对象。有没有Qt的方式来检查空白图像?如果没有,有人可以推荐在Python中使用它的最佳方法吗?如何检查Qt或PyQt中的空白图像?

回答

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元组

返回包含01的2元组 图片的最小值和最大值。在当前版本的PIL中, 这仅适用于单波段 图像。

+0

您的代码中存在拼写错误,它实际上是getextrema而不是getexterma,它会很好地检查空白。 – 2009-07-10 17:06:09

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__