pillow 图像处理_python pillow处理图像 - CSDN
  • Pillow图像处理

    2020-03-22 23:33:52
    文章目录导入Image模块打开图像保存图像基本属性显示图像图像色彩转换颜色通道的分离与合并将图像转换为numpy数组缩放尺寸图像翻转图像裁剪 导入Image模块 from PIL import Image 打开图像 img = Image.open('earth...

    导入Image模块

    from PIL import Image
    

    打开图像

    img = Image.open('earth.jpg')
    

    保存图像

    # 改变文件名的后缀,就可以转换图像格式
    img.save('new_earth.jpg')
    

    基本属性

    print(img.format) #图像格式
    print(img.size) #图像尺寸
    print(img.mode) #色彩模式
    

    输出:

    JPEG
    (1920, 1080)
    RGB
    

    显示图像

    plt.imshow(img)
    plt.show()
    

    图像色彩转换

    img_gray=img.convert("L") #转换为灰度图像,参数1转换成二值图像
    

    颜色通道的分离与合并

    r,g,b=img.split()
    Image.merge("RGB",[r,g,b])
    

    将图像转换为numpy数组

    arr_img=np.array(img)
    

    缩放尺寸

    img_small=img.resize((64,64))
    

    图像翻转

    img.transpose(Image.FLIP_LEFT_RIGHT) #水平翻转
    img.transpose(Image.FLIP_TOP_BOTTOM) #上下翻转
    

    图像裁剪

    img.crop((100,100,400,400))   #(左上角坐标,右下角坐标)
    
    展开全文
  • pillow处理图像

    千次阅读 2016-09-11 20:05:23
    刚接触Pillow的朋友先来看一下Pillow的安装方法,在这里我们以Mac OS环境为例: (1)、使用 pip 安装 Python 库。pip 是 Python 的包管理工具,安装后就可以直接在命令行一站式地安装/管理各种库了(pip 文档)。 ...

    转载自:http://www.jb51.net/article/75204.htm

    安装
    刚接触Pillow的朋友先来看一下Pillow的安装方法,在这里我们以Mac OS环境为例:
    (1)、使用 pip 安装 Python 库。pip 是 Python 的包管理工具,安装后就可以直接在命令行一站式地安装/管理各种库了(pip 文档)。

    1
    2
    3
    4
    5
    6
    7
    $ wget http://pypi.python.org/packages/source/p/pip/pip-0.7.2.tar.gz
      
    $ tar xzf pip-0.7.2.tar.gz
      
    $ cd pip-0.7.2
      
    $ python setup.py install

    (2)、使用 pip 下载获取 Pillow:

    1
    $ pip install pillow

    (3)、安装过程中命令行出现错误提示:”error: command ‘clang' failed with exit status 1”。上网查阅,发现需要通过 Xcode 更新 Command Line Tool。于是打开 Xcode->Preferences->Downloads-Components选项卡。咦?竟然没了 Command Line Tools。再查,发现 Xcode 5 以上现在需要用命令行安装:

    1
    $ xcode-select install

    系统会弹出安装命令行工具的提示,点击安装即可。

    此时再 pip install pillow,就安装成功了。

    pip freeze 命令查看已经安装的 Python 包,Pillow 已经乖乖躺那儿了。

    好了,下面开始进入教程~

    Image类
    Pillow中最重要的类就是Image,该类存在于同名的模块中。可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片。

    使用Image模块中的open函数打开一张图片:

    1
    2
    >>> from PIL import Image
    >>> im = Image.open("lena.ppm")

    如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容

    1
    2
    >>> from __future__ import print_function
    >>> print(im.format, im.size, im.mode)
    1
    PPM (512, 512) RGB

    format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。

    如果文件不能打开,则抛出IOError异常。

    当有一个Image对象时,可以用Image类的各个方法进行处理和操作图像,例如显示图片:

    1
    >>> im.show()

    ps:标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件,然后使用xv进行显示。如果没有安装xv,该函数甚至不能工作。但是该方法非常便于debug和test。(windows中应该调用默认图片查看器打开)

    读写图片
    Pillow库支持相当多的图片格式。直接使用Image模块中的open()函数读取图片,而不必先处理图片的格式,Pillow库自动根据文件决定格式。

    Image模块中的save()函数可以保存图片,除非你指定文件格式,那么文件名中的扩展名用来指定文件格式。

    图片转成jpg格式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from __future__ import print_function
    import os, sys
    from PIL import Image
      
    for infile in sys.argv[1:]:
     f, e = os.path.splitext(infile)
     outfile = f + ".jpg"
     if infile != outfile:
      try:
       Image.open(infile).save(outfile)
      except IOError:
       print("cannot convert", infile)

    save函数的第二个参数可以用来指定图片格式,如果文件名中没有给出一个标准的图像格式,那么第二个参数是必须的。

    创建缩略图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    from __future__ import print_function
    import os, sys
    from PIL import Image
      
    size = (128, 128)
      
    for infile in sys.argv[1:]:
     outfile = os.path.splitext(infile)[0] + ".thumbnail"
     if infile != outfile:
      try:
       im = Image.open(infile)
       im.thumbnail(size)
       im.save(outfile, "JPEG")
      except IOError:
       print("cannot create thumbnail for", infile)

    必须指出的是除非必须,Pillow不会解码或raster数据。当你打开一个文件,Pillow通过文件头确定文件格式,大小,mode等数据,余下数据直到需要时才处理。

    这意味着打开文件非常快,与文件大小和压缩格式无关。下面的程序用来快速确定图片属性:

    确定图片属性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from __future__ import print_function
    import sys
    from PIL import Image
      
    for infile in sys.argv[1:]:
     try:
      with Image.open(infile) as im:
       print(infile, im.format, "%dx%d" % im.size, im.mode)
     except IOError:
      pass

    裁剪、粘贴、与合并图片
    Image类包含还多操作图片区域的方法。如crop()方法可以从图片中提取一个子矩形

    从图片中复制子图像

    1
    2
    3
    box = im.copy() #直接复制图像
    box = (100, 100, 400, 400)
    region = im.crop(box)

    区域由4-tuple决定,该tuple中信息为(left, upper, right, lower)。 Pillow左边系统的原点(0,0)为图片的左上角。坐标中的数字单位为像素点,所以上例中截取的图片大小为300*300像素^2。

    处理子图,粘贴回原图

    1
    2
    region = region.transpose(Image.ROTATE_180)
    im.paste(region, box)

    将子图paste回原图时,子图的region必须和给定box的region吻合。该region不能超过原图。而原图和region的mode不需要匹配,Pillow会自动处理。

    另一个例子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Rolling an image
      
    def roll(image, delta):
     "Roll an image sideways"
      
     image = image.copy() #复制图像
     xsize, ysize = image.size
      
     delta = delta % xsize
     if delta == 0: return image
      
     part1 = image.crop((0, 0, delta, ysize))
     part2 = image.crop((delta, 0, xsize, ysize))
     image.paste(part2, (0, 0, xsize-delta, ysize))
     image.paste(part1, (xsize-delta, 0, xsize, ysize))
      
     return image

    分离和合并通道

    1
    2
    r, g, b = im.split()
    im = Image.merge("RGB", (b, g, r))

    对于单通道图片,split()返回图像本身。为了处理单通道图片,必须先将图片转成RGB。

    几何变换
    Image类有resize()、rotate()和transpose()、transform()方法进行几何变换。

    简单几何变换

    1
    2
    out = im.resize((128, 128))
    out = im.rotate(45) # 顺时针角度表示

    置换图像

    1
    2
    3
    4
    5
    out = im.transpose(Image.FLIP_LEFT_RIGHT)
    out = im.transpose(Image.FLIP_TOP_BOTTOM)
    out = im.transpose(Image.ROTATE_90)
    out = im.transpose(Image.ROTATE_180)
    out = im.transpose(Image.ROTATE_270)

    transpose()和象的rotate()没有性能差别。

    更通用的图像变换方法可以使用transform()

    模式转换
    convert()方法

    模式转换

    1
    im = Image.open('lena.ppm').convert('L')

    图像增强
    Filter
    ImageFilter模块包含很多预定义的增强filters,通过filter()方法使用

    应用filters

    1
    2
    from PIL import ImageFilter
    out = im.filter(ImageFilter.DETAIL)

    像素点处理
    point()方法通过一个函数或者查询表对图像中的像素点进行处理(例如对比度操作)。

    像素点变换

    1
    2
    # multiply each pixel by 1.2
    out = im.point(lambda i: i * 1.2)

    上述方法可以利用简单的表达式进行图像处理,通过组合point()和paste()还能选择性地处理图片的某一区域。

    处理单独通道

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # split the image into individual bands
    source = im.split()
      
    R, G, B = 0, 1, 2
      
    # select regions where red is less than 100
    mask = source[R].point(lambda i: i < 100 and 255)
      
    # process the green band
    out = source[G].point(lambda i: i * 0.7)
      
    # paste the processed band back, but only where red was < 100
    source[G].paste(out, None, mask)
      
    # build a new multiband image
    im = Image.merge(im.mode, source)

    注意到创建mask的语句:

    1
    mask = source[R].point(lambda i: i < 100 and 255)

    该句可以用下句表示

    1
    imout = im.point(lambda i: expression and 255)

    如果expression为假则返回expression的值为0(因为and语句已经可以得出结果了),否则返回255。(mask参数用法:当为0时,保留当前值,255为使用paste进来的值,中间则用于transparency效果)

    高级图片增强
    对其他高级图片增强,应该使用ImageEnhance模块 。一旦有一个Image对象,应用ImageEnhance对象就能快速地进行设置。 可以使用以下方法调整对比度、亮度、色平衡和锐利度。

    图像增强

    1
    2
    3
    4
    from PIL import ImageEnhance
      
    enh = ImageEnhance.Contrast(im)
    enh.enhance(1.3).show("30% more contrast")

    动态图

    Pillow支持一些动态图片的格式如FLI/FLC,GIF和其他一些处于实验阶段的格式。TIFF文件同样可以包含数帧图像。

    当读取动态图时,PIL自动读取动态图的第一帧,可以使用seek和tell方法读取不同帧。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from PIL import Image
      
    im = Image.open("animation.gif")
    im.seek(1) # skip to the second frame
      
    try:
     while 1:
      im.seek(im.tell()+1)
      # do something to im
    except EOFError:
     pass # end of sequence

    当读取到最后一帧时,Pillow抛出EOFError异常。

    当前版本只允许seek到下一帧。为了倒回之前,必须重新打开文件。

    或者可以使用下述迭代器类

    动态图迭代器类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class ImageSequence:
     def __init__(self, im):
      self.im = im
     def __getitem__(self, ix):
      try:
       if ix:
        self.im.seek(ix)
       return self.im
      except EOFError:
       raise IndexError # end of sequence
      
    for frame in ImageSequence(im):
     # ...do something to frame...
    Postscript Printing

    Pillow允许通过Postscript Printer在图片上添加images、text、graphics。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Drawing Postscript
      
    from PIL import Image
    from PIL import PSDraw
      
    im = Image.open("lena.ppm")
    title = "lena"
    box = (1*72, 2*72, 7*72, 10*72) # in points
      
    ps = PSDraw.PSDraw() # default is sys.stdout
    ps.begin_document(title)
      
    # draw the image (75 dpi)
    ps.image(box, im, 75)
    ps.rectangle(box)
      
    # draw centered title
    ps.setfont("HelveticaNarrow-Bold", 36)
    w, h, b = ps.textsize(title)
    ps.text((4*72-w/2, 1*72-h), title)
      
    ps.end_document()

    更多读取图片方法
    之前说到Image模块的open()函数已经足够日常使用。该函数的参数也可以是一个文件对象。

    从string中读取

    1
    2
    3
    import StringIO
      
    im = Image.open(StringIO.StringIO(buffer))

    从tar文件中读取

    1
    2
    3
    4
    from PIL import TarIO
      
    fp = TarIO.TarIO("Imaging.tar", "Imaging/test/lena.ppm")
    im = Image.open(fp)

    草稿模式
    draft()方法允许在不读取文件内容的情况下尽可能(可能不会完全等于给定的参数)地将图片转成给定模式和大小,这在生成缩略图的时候非常有效(速度要求比质量高的场合)。

    draft模式

    1
    2
    3
    4
    5
    6
    from __future__ import print_function
    im = Image.open(file)
    print("original =", im.mode, im.size)
      
    im.draft("L", (100, 100))
    print("draft =", im.mode, im.size)

    展开全文
  • 使用pillow处理图像

    2019-05-22 21:09:23
    1、安装pillow pip install pillow 2、打开图片 from PIL import Image im = Image.open('./templates/images/002-01.jpg') im.show() 3、图片信息 print(im.format,im.size,im.mode) 4、剪切 ret = ...

    1、安装pillow

     pip install pillow
     

    2、打开图片

    from PIL import Image
    im = Image.open('./templates/images/002-01.jpg')
    im.show()

    3、图片信息

    print(im.format,im.size,im.mode)

    4、剪切

    ret = 200,0,300,50
    im.crop(ret).show()

    需要传入一个x0,y0,x1,y1 的集合

    5、缩略图

    size = 128,128
    im.thumbnail(size)
    im.show()

    很明显制作缩略图会覆盖原图片对象。 

    6、缩放

    im2 = im.resize((100,600))
    im2.show()

    重设分辨率返回新的对象而不是修改原对象 

    7、黏贴

    im.paste(im2,(300,100))
    im.show()

    原地修改,不返回新的对象,不需要新变量接收 

    8、翻转和旋转

    im.rotate(90).show()

     

    im.transpose(Image.FLIP_LEFT_RIGHT).show()

    9、操作像素

    for x in range(100,200):
        for y in range(0,100):
            im.putpixel((x,y),(128,128,128))
    
    im.show()

    10、滤镜

    im.filter(ImageFilter.CONTOUR).show()

    简单的练习:

    使用像素替换的方式更改证件照的背景。

    #目标图片
    im1 = Image.open('./templates/tup.png')
    #需要替换的颜色
    im2 = Image.open('./templates/tu3.png')
    
    im1_c1 = im1.getpixel((0, 0))
    im2_c2 = im2.getpixel((0, 0))
    
    #红色背景RGB的主要分布
    color = ((x,y,z) for x in range(150,192) for y in range(12,38) for z in range(22,48))
    
    width, height = im1.size
    
    
    for x in range(width):
        for y in range(height):
            dot = (x,y)
            if im1.getpixel(dot) in color:
                im1.putpixel(dot, im2_c2)
    im1.show()
    im1.save('./templates/tup1.png')

    将红色背景替换为蓝色背景。实际上的效果其实不是很好,人物边缘颜色比较难处理。

    展开全文
  • 使用pillow进行图像处理

    千次阅读 2015-11-04 20:35:28
    PIL库很久没有更新,取而代之的是pillowpillow库提供的imshow函数是文件形式,比较难用,一般使用matplot库中的pyplot.inshow()函数,该函数提供了对于pillow.Image对象的直接支持。此外,matplot.pyplot.imread...

    pillow库取代PIL提供Python下轻量级的图像处理工具
    pillow库提供的imshow函数是文件形式,比较难用,一般使用matplot库中的matplotlib.pyplot.imshow()函数,该函数提供了对于pillow.Image对象的直接支持。

    此外,matplotlib.pyplot.imread库自身也提供了PNG图像加载功能。若已安装pillow库,则其会自动调用以加载其他格式。返回的是标准numpy array。便于计算。

    为了在pillow.Image和numpy array之间进行转换,可以使用以下代码:

    from PIL import Image
    from numpy import array
    img = Image.open("input.png")
    arr = array(img)
    
    img = Image.fromarray(arr)

    def array2PIL(arr, size):
        mode = 'RGBA'
        arr = arr.reshape(arr.shape[0]*arr.shape[1], arr.shape[2])
        if len(arr[0]) == 3:
            arr = numpy.c_[arr, 255*numpy.ones((len(arr),1), numpy.uint8)]
        return Image.frombuffer(mode, size, arr.tostring(), 'raw', mode, 0, 1)
    
    展开全文
  • Pillow图像处理

    2019-08-19 22:35:44
    RGBA解释:A代表第三个参数,透明度 RGBA 值是一组数字,指定顔色中的红、绿、蓝和 alpha(透明度)的值。 在 Pillow 中,RGBA 值表示为四个整数值的元组。...由于 Pillow 的创建者设计 Pillow 模块的方式...
  • Python的Pillow库进行图像文件处理(配图详解)

    万次阅读 多人点赞 2018-07-24 22:56:03
    本文详解的讲解了使用Pillow库进行图片的简单处理,使用PyCharm开发Python的详细过程和各种第三方库的安装与使用。 目标 1.熟悉Python的开发环境; 2.掌握Pillow库的安装方法; 3.熟悉Pillow库的使用方法。 ...
  • pillow是个很好用的python图像处理库,可以到官方网站下载最新的文件。如果官网的任何PIL版本都不能与自己的python版本对应,或安装成功后发现运行出错,可以尝试从一个非官方的whl网站下载:...
  • Pillow(老版本叫PIL,如今被Pillow替代)是一个图像处理库,其最重要的模块就是Image模块,安装pillow,只需要使用命令 pip install Pillow 一、读取一幅图像.open() 可以使用 from PIL import Image im = Image....
  • 在Pyhton图像库「Python Imaging Library」支持大量的图片格式,是图像处理和批处理的最佳选择,可以用这个来创建缩略图、文件格式之间的转换、打印图片、大小转换、颜色转换、还有对图片加滤镜「模糊、磨皮」等操作...
  • Pillow图像处理 图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴。PIL (Python Imaging Library)是 Python 中最常用的图像处理库,目前版本为 1.1.7,我们可以 在...
  • PIL 和pillow图像处理模块安装说明,及其部分异常处理。
  • Pillow中文文档:https://pillow-cn.readthedocs.io/zh_CN/latest/handbook/tutorial.html ...操作图像: #!/usr/bin/env python3 # _*_ coding utf-8 _*_ __author__ = 'nxz' from PIL import...
  • python-pillow图像处理

    2019-09-25 13:41:21
    安装 pip3 install pillow PIL中所涉及的基本概念有如下几个:通道(bands)、模式(mode)、尺寸(size)、坐标系统(coordinate system)、调色板(palette)、信息(info)和滤波器(filters) 1、通道 以RGB...
  • pillow图像处理

    2019-08-11 05:45:21
    2版本的可以直接使用from PIL import Image,导入Image函数,3版本的没有PIL(Python Imaging Library)需要自己安装pillow库 步骤如下; 首先需要将如下这两个文件的路径添加到系统的环境变量当中 然后在命令行...
  • Python_12_pillow图像处理

    2018-01-12 13:05:16
    Python高级编程之pillow图像处理 PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。 由于PIL仅支持到Python 2.7,一群志愿者在PIL的基础上...
  • Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。 1)使用 Image 类 PIL最重要的...
  • 首先说明一下PIL库,PIL(Python Imaging Library)是Python一个强大方便的图像处理库,之前的博客也有用到过PIL模块的demo http://blog.csdn.net/sm9sun/article/details/53538579 不过可惜的是PIL库只支持到Python ...
  • Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。1)使用 Image 类PIL最重要的类是...
  • PIL:Python Imaging Library,是Python环境下最受欢迎的图像处理库,木有之一。pillow简单优雅而功能强大,是图像相关机器学习任务中算法工程师的亲密合作伙伴...
  • PIL:Python Imaging Library,是Python环境下最受欢迎的图像处理库之一。pillow简单优雅而功能强大,是图像相关机器学习任务中算法工程师的亲密合作伙伴。我们...
1 2 3 4 5 ... 20
收藏数 5,751
精华内容 2,300
关键字:

pillow 图像处理