如何在Qt或PyQt中检查空白图像?

4

我生成了一组图片,其中有些图片的背景是白色的空白区域。我可以访问每个图片的QImage对象。有没有一种Qt方法可以检查空白图片?如果没有,能否有人推荐在Python中完成此操作的最佳方式?

2个回答

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中,只适用于单通道图像。


你的代码中有一个错别字,实际上应该是 getextrema 而不是 getexterma,并且它可以很好地检查空格。 - Thierry Lam

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__

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接