【问题标题】:How to analyse bitmap image in python, using PIL?如何使用 PIL 在 python 中分析位图图像?
【发布时间】:2013-09-27 09:54:42
【问题描述】:

我想知道你如何使用 Python Imaging Library 分析一个简单的位图图像(比如位图在顶部有一条粗黑线),以告诉程序图像的顶部是。可能会在找到黑线时输出一条消息。

任何示例代码都会有很大帮助。

【问题讨论】:

    标签: python image bitmap python-imaging-library analysis


    【解决方案1】:

    您可以将图片转换为 rgb,即(红、蓝、绿)。例如,从这里获取一张图片:

    https://github.com/panditarevolution/PIL_Play/blob/master/blackline.jpg

    import PIL
    
    # The conversion should work equally with a bitmap
    img = PIL.Image.open("blackline.jpg")
    rgb_im = img.convert('RGB')
    
    rgb_im.size
    

    这将返回以像素数为单位的大小:(680,646)。您可以使用rgb_im.getpixel((x,y)) 查询单个像素的颜色,其中x 是水平的,y 是垂直的,我相信从上到下。

    所以要检查第一行是否全黑(或大部分是黑色),你可以这样做:

    # Get the first row rgb values
    first_row = [rgb_im.getpixel((i,0)) for i in range(rgb_im.size[0])]
    # Count how many pixels are black. Note that jpg is not the cleanest of all file formats. 
    # Hence converting to and from jpg usually comes with some losses, i.e. changes in pixel values. 
    first_row.count((0,0,0)) # --> 628
    len(first_row) #--> 680
    

    628/680 = 第一行中 92% 的像素是黑色的。

    让我们用set(first_row) 检查第一行中所有出现的颜色,这给了我:

    {(0, 0, 0),
     (0, 0, 2),
     (0, 1, 0),
     (1, 0, 0),
     (1, 1, 1),
     (2, 2, 0),
     (2, 2, 2),
     (4, 4, 2),
     (4, 4, 4),
     (5, 5, 3),
     (5, 7, 6),
     (6, 6, 4),
     (7, 7, 5),
     (14, 14, 12),
     (14, 14, 14),
     (35, 36, 31),
     (52, 53, 48),
     (53, 54, 46),
     (63, 64, 59),
     (64, 65, 60),
     (66, 67, 61),
     (68, 69, 61),
     (76, 77, 71),
     (79, 82, 65),
     (94, 96, 83),
     (96, 98, 87),
     (99, 101, 90),
     (101, 103, 92)}
    

    因此,即使有大约 8% 的非黑色像素,我们也可以看到其中大部分是非常单色的,即灰色阴影;每种颜色的 rgb 值都非常接近。

    这里有一个很好的 PIL 教程: http://effbot.org/imagingbook/

    可以在此处找到基本概述: http://infohost.nmt.edu/tcc/help/pubs/pil.pdf

    作为奖励,并且不知道它是否好(或者它是否涵盖 PIL),这里有一个免费的“使用 Python 编程计算机视觉”草稿: http://programmingcomputervision.com/

    【讨论】:

    • 非常感谢,你解释的很好!
    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 2020-08-28
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2021-03-04
    • 2016-05-02
    相关资源
    最近更新 更多