【问题标题】:How can I check for a blank image in Qt or PyQt?如何在 Qt 或 PyQt 中检查空白图像?
【发布时间】:2009-07-10 15:52:21
【问题描述】:

我已经生成了一组图像。其中一些是空白的,因为它们的背景是白色的。我可以访问每个图像的 QImage 对象。有 Qt 方法来检查空白图像吗?如果没有,有人可以推荐在 Python 中执行此操作的最佳方法吗?

【问题讨论】:

    标签: python qt4 pyqt4


    【解决方案1】:

    我不了解 Qt,但是在 PIL 中有一种简单有效的方法来做到这一点 使用getextrema方法,示例:

    im = Image.open('image.png')
    bands = im.split()
    isBlank = all(band.getextrema() == (255, 255) for band in bands)
    

    来自文档:

    im.getextrema() => 2 元组

    返回一个包含 的最小值和最大值 图片。在当前版本的 PIL 中, 这仅适用于单频 图片。

    【讨论】:

    • 您的代码中有一个错字,它实际上是 getextrema 而不是 getexterma,它可以很好地检查空白。
    【解决方案2】:

    好吧,我会计算图像中的颜色。如果只有一个,则图像为空白。我不知道足够的 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__
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2021-06-18
      相关资源
      最近更新 更多