如何在Qt或PyQt中检查空白图像?
我生成了一些图片,其中有些是空白的,也就是说它们的背景是白色的。我可以访问每张图片的QImage对象。请问有没有Qt的方法可以检查这些空白图片?如果没有,能不能推荐在Python中最好的方法来做到这一点?
2 个回答
1
好吧,我会先数一下图片里的颜色。如果只有一种颜色,那这张图片就是空白的。我对Python和qt了解得不够,所以不能写出代码来,但我相信有一个库可以告诉你一张图片里有多少种颜色(我打算在发完这个帖子后,去看看如何使用ImageMagick来实现这个功能)。
更新:这里有一段用Image::Magick写的Perl代码(抱歉)。你应该可以用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__
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中,这个方法只适用于单通道的图像。