我生成了一组图片,其中有些图片的背景是白色的空白区域。我可以访问每个图片的QImage对象。有没有一种Qt方法可以检查空白图片?如果没有,能否有人推荐在Python中完成此操作的最佳方式?
我不了解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中,只适用于单通道图像。
嗯,我会数图像中的颜色。如果只有一种颜色,那么这张图片就是空白的。我不太懂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__