zoukankan      html  css  js  c++  java
  • python之PIL 二值图像处理和保存

    0.

    1.参考

    http://pszpcl.baike.com/article-77327.html
    windows 图片右键:属性 详细信息 位深度
    位深度 用于指定图像中的每个像素可以使用的颜色信息数量。
        位深度为 1 的图像的像素有两个可能的值:黑色和白色。
        位深度为 8 的灰度模式图像有 256 个可能的灰色值。
        RGB 图像由三个颜色通道组成。8 位/像素的 RGB 图像中的每个通道有 256 个可能的值,这意味着该图像有 1600 万个以上可能的颜色值。
        有时将带有 8 位/通道 (bpc) 的 RGB 图像称作 24 位图像(8 位 x 3 通道 = 24 位数据/像素)。

    2.结论:

    载入黑白图片也可能是0/1二值

    保存黑白图片优选 gif,自动转为0/1二值,且windows下显示正常。

    3. 载入图片后的探索

    #载入黑白图
    In [82]: img.mode  
    Out[82]: 'P'
    In [114]: img.getbands()
    Out[114]: ('P',)    
    In [83]: img.getcolors()
    Out[83]: [(1048, 0), (102, 1)]
    In [84]: print list(img.getdata())[:10]
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    In [90]: set(img.getdata())
    Out[90]: {0, 1}
    
    #载入彩色图
    In [103]: imgc.mode
    Out[103]: 'RGBA'
    In [100]: imgc.getbands()
    Out[100]: ('R', 'G', 'B', 'A')
    In [106]: imgc.getcolors()
    Out[106]:
    [(34, (255, 255, 255, 255)),
     (11, (250, 215, 245, 255)),
    In [112]: list(imgc.getdata())
    Out[112]:
    [(244, 245, 245, 255),
     (245, 245, 245, 255), 

    4. 保存二值黑白图片要区分 gif / png

    In [176]: img=Image.open('split_image/61234.png')
    In [177]: img.show()
    
    In [178]: img.getcolors()  #注意原图 0/1 足以显示为黑白图像
    Out[178]: [(1048, 0), (102, 1)]
    
    In [179]: gray = img.convert('L')
    In [180]: gray_array = np.array(gray)
    In [181]: Image.fromarray(gray_array).show()
    In [182]: gray_array
    Out[182]:
    array([[249, 249, 249, ..., 249, 249, 249],
           [249, 249, 249, ..., 249, 249, 249],
           [249, 249, 249, ..., 249, 249, 249],
           ...,
           [249, 249, 249, ..., 249, 249, 249],
           [249, 249, 249, ..., 249, 249, 249],
           [249, 249, 249, ..., 249, 249, 249]], dtype=uint8)
    
    In [183]: bilevel = Image.fromarray(np.where(gray_array<100,0,200))
    In [184]: bilevel.getcolors()
    Out[184]: [(1048, 200), (102, 0)]
    
    In [185]: bilevel.save('png.png')
    In [186]: bilevel.save('gif.gif')
    
    In [187]: Image.open('png.png').getcolors()  #png灰度值得以保留
    Out[187]: [(1048, 200), (102, 0)]
    
    In [188]: Image.open('gif.gif').getcolors()  #gif只剩0/1
    Out[188]: [(102, 0), (1048, 1)]

    原图png

    PIL处理后保存的gif:

    PIL处理后保存的png,在windows中也显示为黑图,PIL show显示正常:

    d

  • 相关阅读:
    右键点击任务栏程序没有锁定菜单
    CMD命令:不是内部或者外部命令也不是可运行的程序或批处理文件
    通道闸机
    Activex、OLE、COM、OCX、DLL之间区别、联系[转]
    C#图像显示实现拖拽、锚点缩放功能【转】
    顶级人生规划[转]
    jqGrid选择列控件向右拖拽超出边界处理
    强力推荐!那些你不能错过的 GitHub 插件和工具
    GitHub 托管的10款免费开源 windows 工具
    实现阶层跨越的捷径
  • 原文地址:https://www.cnblogs.com/my8100/p/7428368.html
Copyright © 2011-2022 走看看