2009-07-10 51 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__