我生成了一组图像。其中一些是空白的,因为它们的背景是白色的。我可以访问每个图像的 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 来实现此目的) 。

更新: 这是使用以下方法执行此操作的 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__
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top