image模块_from pil import image找不到模块 - CSDN
精华内容
参与话题
  • python Image 模块处理图片

    千次阅读 2019-07-23 19:50:06
    Python-Image 基本的图像处理操作,有需要的朋友可以参考下。 Python 里面最常用的图像操作库是 Image library(PIL),功能上,虽然还不能跟Matlab比较,但是还是比较强大的,废话补多少,写点记录笔记。 1....

    Python-Image 基本的图像处理操作,有需要的朋友可以参考下。

    Python 里面最常用的图像操作库是

     

    Image library(PIL),功能上,虽然还不能跟Matlab比较,但是还是比较强大的,废话补多少,写点记录笔记。

    1. 首先需要导入需要的图像库:

    import Image

    2. 读取一张图片:

    im=Image.open('/home/Picture/test.jpg')

    3. 显示一张图片:

    im.show()

    4. 保存图片:

    im.save("save.gif","GIF") #保存图像为gif格式

    5. 创建新图片:

    Image.new(mode,size)

    Image.new(mode,size,color)

    栗子:newImg = Image.new("RGBA",(640,480),(0,255,0))

    newImg.save("newImg.png","PNG")

    6.两张图片相加:

    Image.blend(img1,img2,alpha) # 这里alpha表示img1和img2的比例参数

    7. 点操作:

    im.point(function) #,这个function接受一个参数,且对图片中的每一个点执行这个函数

    比如:out=im.point(lambdai:i*1.5)#对每个点进行50%的加强

    8. 查看图像信息:

    im.format, im.size, im.mode

    9. 图片裁剪:

    box=(100,100,500,500)

    #设置要裁剪的区域

    region=im.crop(box) #此时,region是一个新的图像对象。

    10. 图像黏贴(合并)

    im.paste(region,box)#粘贴box大小的region到原先的图片对象中。

    11. 通道分离:

    r,g,b=im.split()#分割成三个通道,此时r,g,b分别为三个图像对象。

    12. 通道合并:

    im=Image.merge("RGB",(b,g,r))#将b,r两个通道进行翻转。

    13. 改变图像的大小:

    out=img.resize((128,128))#resize成128*128像素大小

    14. 旋转图像:

    out=img.rotate(45) #逆时针旋转45度

    有更方便的:

    region = region.transpose(Image.ROTATE_180)

    15. 图像转换:

    out = im.transpose(Image.FLIP_LEFT_RIGHT)

    #左右对换。

    out = im.transpose(Image.FLIP_TOP_BOTTOM)

    #上下对换

    16. 图像类型转换:

    im=im.convert("RGBA")

    17. 获取某个像素位置的值:

    im.getpixel((4,4))

    18. 写某个像素位置的值:

    img.putpixel((4,4),(255,0,0))

    展开全文
  • Python图像处理PIL各模块详细介绍

    万次阅读 多人点赞 2018-01-23 09:13:30
    Image模块 Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内。如open、save、conver、show…等功能。 open类 Image.open(file) ⇒ image Image.open(file, ...

    Image模块

    Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内。如opensaveconvershow…等功能。

    open类

    Image.open(file) ⇒ image
    Image.open(file, mode) ⇒ image

    要从文件加载图像,使用 open() 函数, 在 Image 模块:

        @zhangziju
        from PIL import Image             ##调用库
        im = Image.open("E:\mywife.jpg")  ##文件存在的路径
        im.show()                         

    我老婆

    需要知道的是在win的环境下im.show的方式为win自带的图像显示应用。打开并确认给定的图像文件。这个是一个懒操作;该函数只会读文件头,而真实的图像数据直到试图处理该数据才会从文件读取(调用load()方法将强行加载图像数据)。如果变量mode被设置,那必须是“r”。用户可以使用一个字符串(表示文件名称的字符串)或者文件对象作为变量file的值。文件对象必须实现read(),seek()和tell()方法,并且以二进制模式打开。

    Save类

    im.save(outfile,options…)
    im.save(outfile, format, options…)

    若要保存文件,则使用 Image 类的 save() 方法,此时保存文件的文件名就变得十分重要了,除非指定格式,否则这个库将会以文件名的扩展名作为格式保存。使用给定的文件名保存图像。如果变量format缺省,如果可能的话,则从文件名称的扩展名判断文件的格式。该方法返回为空。关键字options为文件编写器提供一些额外的指令。如果编写器不能识别某个选项,它将忽略它。用户可以使用文件对象代替文件名称。在这种情况下,用户必须指定文件格式。文件对象必须实现了seek()、tell()和write()方法,且其以二进制模式打开。如果方法save()因为某些原因失败,这个方法将产生一个异常(通常为IOError异常)。如果发生了异常,该方法也有可能已经创建了文件,并向文件写入了一些数据。如果需要的话,用户的应用程序可以删除这个不完整的文件。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im)
    im.save("E:\mywife.png")     ## 将"E:\mywife.jpg"保存为"E:\mywife.png"
    im = Image.open("E:\mywife.png")  ##打开新的png图片
    print(im.format, im.size, im.mode)

    这里写图片描述
    如下图,在指定路径下可看到新保存的png格式的图片。
    新的png图片

    format类

    im.format ⇒ string or None

    这个属性标识了图像来源,如果图像不是从文件读取它的值就是None。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.format) ## 打印出格式信息
    im.show()

    如下图可以看到其format为”JPEG”。

    format

    Mode类

    im.mode ⇒ string

    图像的模式,常见的mode 有 “L” (luminance) 表示灰度图像,“RGB”表示真彩色图像,和 “CMYK” 表示出版图像,表明图像所使用像素格式。如下表为常见的nodes描述:

    modes 描述
    1 1位像素,黑和白,存成8位的像素
    L 8位像素,黑白
    P 8位像素,使用调色板映射到任何其他模式
    RGB 3× 8位像素,真彩
    RGBA 4×8位像素,真彩+透明通道
    CMYK 4×8位像素,颜色隔离
    YCbCr 3×8位像素,彩色视频格式
    I 32位整型像素
    F 32位浮点型像素
    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.mode) ## 打印出模式信息
    im.show()

    如下图为图片的mode为“RGB”模式。

    mode

    convert类

    im.convert(mode)⇒ image

    将当前图像转换为其他模式,并且返回新的图像。当从一个调色板图像转换时,这个方法通过这个调色板来转换像素。如果不对变量mode赋值,该方法将会选择一种模式,在没有调色板的情况下,使得图像和调色板中的所有信息都可以被表示出来。当从一个颜色图像转换为黑白图像时,PIL库使用ITU-R601-2 luma转换公式:

    L = R * 299/1000 + G * 587/1000 + B * 114/1000

    当转换为2位图像(模式“1”)时,源图像首先被转换为黑白图像。结果数据中大于127的值被设置为白色,其他的设置为黑色;这样图像会出现抖动。如果要使用其他阈值,更改阈值127,可以使用方法point()。为了去掉图像抖动现象,可以使用dither选项。

    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    new_im = im.convert('P')
    print(new_im.mode)
    new_im.show()

    如下,将图像转换为“P”模式。

    这里写图片描述
    对比原始图像。

    这里写图片描述

    im.convert(“P”,**options) ⇒ image

    这个与第一个方法定义一样,但是当“RGB”图像转换为8位调色板图像时能更好的处理。可供选择的选项为:

    Dither=. 控制颜色抖动。默认是FLOYDSTEINBERG,与邻近的像素一起承担错误。不使能该功能,则赋值为NONE。

    Palette=. 控制调色板的产生。默认是WEB,这是标准的216色的“web palette”。要使用优化的调色板,则赋值为ADAPTIVE。

    Colors=. 当选项palette为ADAPTIVE时,控制用于调色板的颜色数目。默认是最大值,即256种颜色

    im.convert(mode,matrix) ⇒ image

    使用转换矩阵将一个“RGB”图像转换为“L”或者“RGB”图像。变量matrix为4或者16元组。

    
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.mode)
    rgb2xyz = (0.412453,0.357580, 0.180423, 0,
               0.212671,0.715160, 0.072169, 0,
               0.019334,0.119193, 0.950227, 0 )
    new_im = im.convert("L", rgb2xyz)
    print(new_im.mode)
    new_im.show()

    这里写图片描述
    转换后效果

    这里写图片描述

    Size类

    im.size ⇒ (width, height)

    图像的尺寸,按照像素数计算,它的返回值为宽度和高度的二元组(width, height)。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.size) ## 打印出尺寸信息
    im.show()

    如下图所示为图片的尺寸信息,750*560。

    这里写图片描述

    Palette类

    im.palette ⇒ palette or None

    颜色调色板表格。如果图像的模式是“P”,则返回ImagePalette类的实例;否则,将为None。
    如下为对非“P”模式下的图像进行palette信息显示。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.palette)

    易知,返回值为空,none

    这里写图片描述
    对图像进行convert操作,转换成“P”模式

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    new_im = im.convert('P')
    print(new_im.mode)
    print(new_im.palette)

    则返回值为ImagePalette类的实例。如下:

    这里写图片描述

    Info类

    im.info ⇒ dictionary

    存储图像相关数据的字典。文件句柄使用该字典传递从文件中读取的各种非图像信息。大多数方法在返回新的图像时都会忽略这个字典;因为字典中的键并非标准化的,对于一个方法,它不能知道自己的操作如何影响这个字典。如果用户需要这些信息,需要在方法open()返回时保存这个字典。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.info)

    这里写图片描述

    new类

    Image.new(mode,size) ⇒ image
    Image.new(mode, size,color) ⇒ image

    使用给定的变量mode和size生成新的图像。Size是给定的宽/高二元组,这是按照像素数来计算的。对于单通道图像,变量color只给定一个值;对于多通道图像,变量color给定一个元组(每个通道对应一个值)。在版本1.1.4及其之后,用户也可以用颜色的名称,比如给变量color赋值为“red”。如果没有对变量color赋值,图像内容将会被全部赋值为0(为黑色)。如果变量color是空,图像将不会被初始化,即图像的内容全为0。这对向该图像复制或绘制某些内容是有用的。

    如下为将图像设置为128x128大小的红色图像。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    n_im= Image.new("RGB", (128, 128), "#FF0000")
    n_im.show()

    显示效果如下:

    这里写图片描述
    如下图像为128x128大小的黑色图像,因为变量color不赋值的话,图像内容被设置为0,即黑色。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    n_im= Image.new("RGB", (128, 128))
    n_im.show()

    黑
    图像为128x128大小的绿色图像。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    n_im= Image.new("RGB", (128, 128),"green")
    n_im.show()

    这里写图片描述

    Copy类

    im.copy() ⇒ image

    拷贝这个图像。如果用户想粘贴一些数据到这张图,可以使用这个方法,但是原始图像不会受到影响。

    
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    im_copy = im.copy()

    图像im_copy和im完全一样。

    Crop类

    im.crop(box) ⇒ image

    从当前的图像中返回一个矩形区域的拷贝。变量box是一个四元组,定义了左、上、右和下的像素坐标。用来表示在原始图像中截取的位置坐标,如box(100,100,200,200)就表示在原始图像中以左上角为坐标原点,截取一个100*100(像素为单位)的图像,为方便理解,如下为示意图box(b1,a1,b2,a2)。作图软件为Visio2016。这是一个懒操作。对源图像的改变可能或者可能不体现在裁减下来的图像中。为了获取一个分离的拷贝,对裁剪的拷贝调用方法load()。

    box区域示意图

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    box = (300, 100, 700, 700)              ##确定拷贝区域大小
    region = im.crop(box)                   ##将im表示的图片对象拷贝到region中,大小为box
    region.show()

    如下图为box截取的图像区域显示。

    box区域图

    Paste类

    im.paste(image,box)

    将一张图粘贴到另一张图像上。变量box或者是一个给定左上角的2元组,或者是定义了左,上,右和下像素坐标的4元组,或者为空(与(0,0)一样)。如果给定4元组,被粘贴的图像的尺寸必须与区域尺寸一样。如果模式不匹配,被粘贴的图像将被转换为当前图像的模式。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    box=[0,0,100,100]
    im_crop = im.crop(box)
    print(im_crop.size,im_crop.mode)
    im.paste(im_crop, (100,100))             ##(100,100,0,0)
    im.paste(im_crop, (400,400,500,500))
    im.show()

    如下图为paste操作:

    这里写图片描述

    Filter类

    im.filter(filter) ⇒ image

    返回一个使用给定滤波器处理过的图像的拷贝。具体参考图像滤波在ImageFilter 模块的应用,在该模块中,预先定义了很多增强滤波器,可以通过filter( )函数使用,预定义滤波器包括:BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值滤波,CONTOUR找轮廓,FIND_EDGES边缘检测,使用该模块时,需先导入。

    @zhangziju
    from PIL import Image
    from PIL import ImageFilter                         ## 调取ImageFilter
    imgF = Image.open("E:\mywife.jpg")
    bluF = imgF.filter(ImageFilter.BLUR)                ##均值滤波
    conF = imgF.filter(ImageFilter.CONTOUR)             ##找轮廓
    edgeF = imgF.filter(ImageFilter.FIND_EDGES)         ##边缘检测
    imgF.show()
    bluF.show()
    conF.show()
    edgeF.show()

    滤波处理下的gakki~

    滤波

    Blend类

    Image.blend(image1,image2, alpha) ⇒ image

    使用给定的两张图像及透明度变量alpha,插值出一张新的图像。这两张图像必须有一样的尺寸和模式。

    合成公式为:out = image1 (1.0 - alpha) + image2 alpha

    若变量alpha为0.0,返回第一张图像的拷贝。若变量alpha为1.0,将返回第二张图像的拷贝。对变量alpha的值无限制。

    @zhangziju
    from PIL import Image
    im1 = Image.open("E:\mywife.jpg")
    im2 = Image.open("E:\mywife2.jpg")
    print(im1.mode,im1.size)
    print(im2.mode,im2.size)
    im = Image.blend(im1, im2, 0.2)
    im.show()

    需保证两张图像的模式和大小是一致的,如下为显示im1和im2的具体信息。

    这里写图片描述
    im1和im2按照第一张80%的透明度,第二张20%的透明度,合成为一张。
    这里写图片描述

    Split

    im.split() ⇒ sequence

    返回当前图像各个通道组成的一个元组。例如,分离一个“RGB”图像将产生三个新的图像,分别对应原始图像的每个通道(红,绿,蓝)。

    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    r,g,b = im.split()
    print(r.mode)
    print(r.size)
    print(im.size)

    这里写图片描述

    Composite类

    Image.composite(image1,image2, mask) ⇒ image

    复合类使用给定的两张图像及mask图像作为透明度,插值出一张新的图像。变量mask图像的模式可以为“1”,“L”或者“RGBA”。所有图像必须有相同的尺寸。

    @zhangziju
    from PIL import Image
    im1 = Image.open("E:\mywife.jpg")
    im2 = Image.open("E:\mywife2.jpg")
    r,g,b = im1.split()             ##分离出r,g,b
    print(b.mode)
    print(im1.mode,im1.size)
    print(im2.mode,im2.size)
    im = Image.composite(im1,im2,b)
    im.show()

    b.mode为”L”,两图尺寸一致。

    这里写图片描述
    最终效果

    这里写图片描述

    Eval类

    Image.eval(image,function) ⇒ image

    使用变量function对应的函数(该函数应该有一个参数)处理变量image所代表图像中的每一个像素点。如果变量image所代表图像有多个通道,那变量function对应的函数作用于每一个通道。注意:变量function对每个像素只处理一次,所以不能使用随机组件和其他生成器。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    def fun01(x):
        return x*0.3
    def fun02(y):
        return y*2.0
    im1_eval = Image.eval(im, fun01)
    im2_eval = Image.eval(im, fun02)
    im1_eval.show()
    im2_eval.show()
    

    在函数fun01和fun02下的图像显示。

    这里写图片描述

    Merge类

    Image.merge(mode,bands) ⇒ image

    合并类使用一些单通道图像,创建一个新的图像。变量bands为一个图像的元组或者列表,每个通道的模式由变量mode描述。所有通道必须有相同的尺寸。
    变量mode与变量bands的关系:

    len(ImageMode.getmode(mode).bands)= len(bands)

    @zhangziju
    from PIL import Image
    im1 = Image.open("E:\mywife.jpg")
    im2 = Image.open("E:\mywife2.jpg")
    r1,g1,b1 = im1.split()
    r2,g2,b2 = im2.split()
    print(r1.mode,r1.size,g1.mode,g1.size)
    print(r2.mode,r2.size,g2.mode,g2.size)
    new_im=[r1,g2,b2]
    print(len(new_im))
    im_merge = Image.merge("RGB",new_im)
    im_merge.show()

    打印信息显示

    这里写图片描述
    merge操作

    这里写图片描述

    Draft类

    im.draft(mode,size)

    配置图像文件加载器,使得返回一个与给定的模式和尺寸尽可能匹配的图像的版本。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.size,im.mode)
    new_im = im.draft("L", (200,200))
    print(new_im.size,new_im.mode)
    new_im.show()

    关键信息显示

    这里写图片描述
    转换效果

    这里写图片描述

    Getbands类

    im.getbands()⇒ tuple of strings

    返回包括每个通道名称的元组。例如,对于RGB图像将返回(“R”,“G”,“B”)。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.getbands())
    

    这里写图片描述

    Getbbox类

    im.getbbox() ⇒ 4-tuple or None

    计算图像非零区域的包围盒。这个包围盒是一个4元组,定义了左、上、右和下像素坐标。如果图像是空的,这个方法将返回空。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.getbbox())

    这里写图片描述

    Getdata类

    im.getdata() ⇒ sequence

    以包含像素值的sequence对象形式返回图像的内容。这个sequence对象是扁平的,以便第一行的值直接跟在第零行的值后面,等等。这个方法返回的sequence对象是PIL内部数据类型,它只支持某些sequence操作,包括迭代和基础sequence访问。使用list(im.getdata()),将它转换为普通的sequence。Sequence对象的每一个元素对应一个像素点的R、G和B三个值。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    sequ = im.getdata()
    sequ0 = list(sequ)
    print(sequ0[0])
    print(sequ0[1])
    print(sequ0[2])

    可视化显示sequence0里面的数据。

    这里写图片描述
    打印显示结果,与前面对比。

    这里写图片描述

    Getextrema类

    im.getextrema() ⇒ 2-tuple

    返回一个2元组,包括该图像中的最小和最大值。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.getextrema())

    该方法返回了R/G/B三个通道的最小和最大值的2元组。

    这里写图片描述

    Getpixel类

    im.getpixel(xy) ⇒ value or tuple

    返回给定位置的像素值。如果图像为多通道,则返回一个元组。该方法执行比较慢;如果用户需要使用python处理图像中较大部分数据,可以使用像素访问对象(见load),或者方法getdata()。

    @zahngziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.getpixel((0,0)))
    print(im.getpixel((4,0)))
    r,g,b = im.split()
    print(b.getpixel((11,8)))   

    这里写图片描述

    Histogram类

    im.histogram()⇒ list

    返回一个图像的直方图。这个直方图是关于像素数量的list,图像中的每个象素值对应一个成员。如果图像有多个通道,所有通道的直方图会连接起来(例如,“RGB”图像的直方图有768个值)。二值图像(模式为“1”)当作灰度图像(模式为“L”)处理。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    imhis = im.histogram()
    print(len(imhis))
    print(imhis[0])
    print(imhis[150])
    print(imhis[300])

    这里写图片描述

    im.histogram(mask)⇒ list

    返回图像中模板图像非零地方的直方图。模板图像与处理图像的尺寸必须相同,并且要么是二值图像(模式为“1”),要么为灰度图像(模式为“L”)。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    r,g,b = im.split()
    imhis = im.histogram()
    print(r.mode)
    print(len(imhis))
    print(imhis[0])
    print(imhis[150])
    print(imhis[300])

    这里写图片描述

    Load类

    im.load()

    为图像分配内存并从文件中加载它(或者从源图像,对于懒操作)。正常情况下,用户不需要调用这个方法,因为在第一次访问图像时,Image类会自动地加载打开的图像。在1.1.6及以后的版本,方法load()返回一个用于读取和修改像素的像素访问对象。这个访问对象像一个二维队列,如:

    pix = im.load()
    print pix[x, y]
    pix[x, y] =value

    通过这个对象访问比方法getpixel()和putpixel()快很多。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    pix = im.load()
    print(pix[0,2])

    这里写图片描述

    im.paste(colour,box)

    使用同一种颜色填充变量box对应的区域。对于单通道图像,变量colour为单个颜色值;对于多通道,则为一个元组。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    im.paste((256,256,0),(0,0,100,100))  ##(256,256,0)表示黄色
    im.show()

    这里写图片描述

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    im.paste("blue",(0,0,100,100))   ##或者“blue”
    im.show()

    这里写图片描述

    im.paste(image,box, mask)

    使用变量mask对应的模板图像来填充所对应的区域。可以使用模式为“1”、“L”或者“RGBA”的图像作为模板图像。模板图像的尺寸必须与变量image对应的图像尺寸一致。如果变量mask对应图像的值为255,则模板图像的值直接被拷贝过来;如果变量mask对应图像的值为0,则保持当前图像的原始值。变量mask对应图像的其他值,将对两张图像的值进行透明融合,如果变量image对应的为“RGBA”图像,即粘贴的图像模式为“RGBA”,则alpha通道被忽略。用户可以使用同样的图像作为原图像和模板图像

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    box=[300,300,400,400]
    im_crop =im.crop(box)
    r,g,b =im_crop.split()
    im.paste(im_crop, (200,200,300,300), r)
    im.show()

    这里写图片描述

    Putdata类

    im.putdata(data)
    im.putdata(data, scale, offset)

    从sequence对象中拷贝数据到当前图像,从图像的左上角(0,0)位置开始。变量scale和offset用来调整sequence中的值:

    pixel = value*scale + offset

    如果变量scale忽略,则默认为1.0。如果变量offset忽略,则默认为0.0。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    r, g, b = im.split()
    print(
    r.getpixel((0, 0)),
    r.getpixel((1, 0)),
    r.getpixel((2, 0)),
    r.getpixel((3, 0)),
    r.putdata([1, 2, 3, 4]),
    r.getpixel((0, 0)),
    r.getpixel((1, 0)),
    r.getpixel((2, 0)),
    r.getpixel((3, 0)),
    )

    这里写图片描述

    Resize类

    im.resize(size) ⇒ image
    im.resize(size, filter) ⇒ image

    返回改变尺寸的图像的拷贝。变量size是所要求的尺寸,是一个二元组:(width, height)。变量filter为NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者图像模式为“1”或者“P”,该变量设置为NEAREST。在当前的版本中bilinear和bicubic滤波器不能很好地适应大比例的下采样(例如生成缩略图)。用户需要使用ANTIALIAS,除非速度比质量更重要。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    region = im.resize((400, 400))     ##重新设定大小
    region.show()

    很明显由于大小的重新设定,图片的显示效果有所转变,gakki依然美腻~
    设定大小

    Rotate类

    im.rotate(angle) ⇒ image
    im.rotate(angle,filter=NEAREST, expand=0) ⇒ image

    返回一个按照给定角度顺时钟围绕图像中心旋转后的图像拷贝。变量filter是NEAREST、BILINEAR或者BICUBIC之一。如果省略该变量,或者图像模式为“1”或者“P”,则默认为NEAREST。变量expand,如果为true,表示输出图像足够大,可以装载旋转后的图像。如果为false或者缺省,则输出图像与输入图像尺寸一样大。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    im_45 = im.rotate(45)
    im_30 = im.rotate(30, Image.NEAREST,1)
    print(im_45.size,im_30.size)
    im_45.show()
    im_30.show()

    这里写图片描述

    这里写图片描述

    Seek类

    im.seek(frame)

    在给定的文件序列中查找指定的帧。如果查找超越了序列的末尾,则产生一个EOFError异常。当文件序列被打开时,PIL库自动指定到第0帧上。

    @zhangziju
    from PIL import Image
    im_gif = Image.open("E:\mywife.gif")
    print(im_gif.mode)
    im_gif.show()    ##第0帧
    im_gif.seek(3)
    im_gif.show()
    im_gif.seek(9)
    im_gif.show()

    来来来~这是gakki原图欣赏下~

    这里写图片描述
    查找帧seek()的效果如下:

    这里写图片描述

    Tell类

    im.tell() ⇒ integer

    返回当前帧所处位置,从0开始计算。

    @zhangziju
    from PIL import Image
    im_gif = Image.open("E:\mywife.gif")
    print(im_gif.tell())
    im_gif.seek(8)
    print(im_gif.tell())

    这里写图片描述

    Thumbnail类

    im.thumbnail(size)
    im.thumbnail(size, filter)

    修改当前图像,使其包含一个自身的缩略图,该缩略图尺寸不大于给定的尺寸。这个方法会计算一个合适的缩略图尺寸,使其符合当前图像的宽高比,调用方法draft()配置文件读取器,最后改变图像的尺寸。变量filter应该是NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果省略该变量,则默认为NEAREST。注意:在当前PIL的版本中,滤波器bilinear和bicubic不能很好地适应缩略图产生。用户应该使用ANTIALIAS,图像质量最好。如果处理速度比图像质量更重要,可以选用其他滤波器。这个方法在原图上进行修改。如果用户不想修改原图,可以使用方法copy()拷贝一个图像。这个方法返回空。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    im.thumbnail((100,100))

    Transform类

    im.transform(size,method, data) ⇒ image
    im.transform(size, method, data, filter) ⇒ image

    使用给定的尺寸生成一张新的图像,与原图有相同的模式,使用给定的转换方式将原图数据拷贝到新的图像中。在当前的PIL版本中,参数method为EXTENT(裁剪出一个矩形区域),AFFINE(仿射变换),QUAD(将正方形转换为矩形),MESH(一个操作映射多个正方形)或者PERSPECTIVE。变量filter定义了对原始图像中像素的滤波器。在当前的版本中,变量filter为NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者图像模式为“1”或者“P”,该变量设置为NEAREST。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.size)
    imtra = im.transform((200, 200), Image.EXTENT, (0, 0, 500, 500))
    print(imtra.size)
    imtra.show()

    这里写图片描述

    这里写图片描述

    im.transform(size,EXTENT, data) ⇒ image
    im.transform(size, EXTENT, data, filter) ⇒ image

    从图像中裁剪一个区域。变量data为指定输入图像中两个坐标点的4元组(x0,y0,x1,y1)。输出图像为这两个坐标点之间像素的采样结果。例如,如果输入图像的(x0,y0)为输出图像的(0,0)点,(x1,y1)则与变量size一样。这个方法可以用于在当前图像中裁剪,放大,缩小或者镜像一个任意的长方形。它比方法crop()稍慢,但是与resize操作一样快。

    im.transform(size, AFFINE, data) ⇒ image
    im.transform(size, AFFINE,data, filter) ⇒ image

    对当前的图像进行仿射变换,变换结果体现在给定尺寸的新图像中。变量data是一个6元组(a,b,c,d,e,f),包含一个仿射变换矩阵的第一个两行。输出图像中的每一个像素(x,y),新值由输入图像的位置(ax+by+c, dx+ey+f)的像素产生,使用最接近的像素进行近似。这个方法用于原始图像的缩放、转换、旋转和裁剪。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.size)
    imtra = im.transform((200, 200), Image.AFFINE, (1,2,3,2,1,4))
    print(imtra.size)
    imtra.show()

    这里写图片描述
    这里写图片描述

    im.transform(size,QUAD, data) ⇒ image
    im.transform(size, QUAD, data, filter) ⇒ image

    输入图像的一个四边形(通过四个角定义的区域)映射到给定尺寸的长方形。变量data是一个8元组(x0,y0,x1,y1,x2,y2,x3,y3),它包括源四边形的左上,左下,右下和右上四个角。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.size)
    imtra = im.transform((200, 200), Image.QUAD, (0,0,0,500,600,500,600,0))
    print(imtra.size)
    imtra.show()

    这里写图片描述
    这里写图片描述

    im.transform(size,PERSPECTIVE, data) ⇒ image
    im.transform(size, PERSPECTIVE, data, filter) ⇒ image

    对当前图像进行透视变换,产生给定尺寸的新图像。变量data是一个8元组(a,b,c,d,e,f,g,h),包括一个透视变换的系数。对于输出图像中的每个像素点,新的值来自于输入图像的位置的(a x + b y + c)/(g x + h y + 1), (d x+ e y + f)/(g x + h y + 1)像素,使用最接近的像素进行近似。这个方法用于原始图像的2D透视。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    print(im.size)
    imtra = im.transform((200, 200), Image.PERSPECTIVE, (1,2,3,2,1,6,1,2))
    print(imtra.size)
    imtra.show()

    这里写图片描述
    wocao!!!gakki不见了!!!

    这里写图片描述

    Transpose类

    im.transpose(method)⇒ image

    返回当前图像的翻转或者旋转的拷贝。变量method的取值为:FLIP_LEFT_RIGHT,FLIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,或ROTATE_270。

    @zhangziju
    from PIL import Image
    im = Image.open("E:\mywife.jpg")
    im.rotate(45)                             #逆时针旋转 45 度角。
    im.transpose(Image.FLIP_LEFT_RIGHT)       #左右对换。
    im.transpose(Image.FLIP_TOP_BOTTOM)       #上下对换。
    im.transpose(Image.ROTATE_90)             #旋转 90 度角。
    im.transpose(Image.ROTATE_180)            #旋转 180 度角。
    im.transpose(Image.ROTATE_270)            #旋转 270 度角。
    展开全文
  • 原文链接:https://blog.csdn.net/icamera0/article/details/50654910Image模块是PIL中最重要的模块,它有一个类叫做image,与模块名称相同。Image类有很多函数、方法及属性,接下来将依次对image类的属性、函数和...

    原文链接:https://blog.csdn.net/icamera0/article/details/50654910

    Image模块是PIL中最重要的模块,它有一个类叫做image,与模块名称相同。Image类有很多函数、方法及属性,接下来将依次对image类的属性、函数和方法进行介绍。

    一、Image类的属性

    1、  Format

    定义:im.format  string or None

    含义:源文件的文件格式。如果是由PIL创建的图像,则其文件格式为None

    例子:

    >>>from PIL import Image

    >>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

    >>>im.format

    'JPEG'

    注:test.jpgJPEG图像,所以其文件格式为JPEG

    >>> im= Image.open("D:\\Code\\Python\\test\\img\\test.gif")

    >>>im.format

    'GIF'

    注:test.gifGIF文件,所以其文件格式为GIF

    2、  Mode

    定义:im.mode  string

    含义:图像的模式。这个字符串表明图像所使用像素格式。该属性典型的取值为“1”,“L”,“RGB”或“CMYK”。对于图像模式的介绍,可以参考我的blogPython图像处理库PIL的基本概念介绍”。

    例子:

    >>>from PIL import Image

    >>> im = Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

    >>> im.mode

    'RGB'

    >>> im = Image.open("D:\\Code\\Python\\test\\img\\test.gif")

    >>> im.mode

    'P'

    3、  Size

    定义:im.size  (width, height)

    含义:图像的尺寸,按照像素数计算。它的返回值为宽度和高度的二元组(width, height)。

    例子:

    >>>from PIL import Image

    >>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

    >>>im.size

    (800, 450)

    >>> im= Image.open("D:\\Code\\Python\\test\\img\\test.gif")

    >>> im.size

    (400, 220)

    4、  Palette

    定义:im.palette  palette or None

    含义:颜色调色板表格。如果图像的模式是“P”,则返回ImagePalette类的实例;否则,将为None

    例子:

    >>> from PIL import Image

    >>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

    >>> im.mode

    'RGB'

    >>>im.palette

    >>> im= Image.open("D:\\Code\\Python\\test\\img\\test.gif")

    >>> im.mode

    'P'

    >>>im.palette

    <PIL.ImagePalette.ImagePaletteobject at 0x035E7AD0>

    >>> pl= im.palette

    PlImagePalette类的实例。

    5、  Info

    定义:im.info  dictionary

    含义:存储图像相关数据的字典。文件句柄使用该字典传递从文件中读取的各种非图像信息。大多数方法在返回新的图像时都会忽略这个字典;因为字典中的键并非标准化的,对于一个方法,它不能知道自己的操作如何影响这个字典。如果用户需要这些信息,需要在方法open()返回时保存这个字典。

    例子:

    >>>from PIL import Image

    >>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

    >>>im.info

    {'jfif_version':(1, 1), 'jfif': 257, 'jfif_unit': 1, 'jfif_density': (96, 96), 'dpi': (96, 96)}

    >>> im= Image.open("D:\\Code\\Python\\test\\img\\test.gif")

    >>>im.info

    {'duration':100, 'version': 'GIF89a', 'extension': ('NETSCAPE2.0', 795L), 'background': 0,'loop': 0}

    展开全文
  • Python-Image模块

    2019-06-24 18:16:40
    Python-Image 基本的图像处理操作 Python 里面最常用的图像操作库是Image library(PIL),功能上,虽然还不能跟Matlab比较,但是还是比较强大的,废话补多少,写点记录笔记。 1. 首先需要导入需要的图像库: ...

    Python-Image 基本的图像处理操作

    Python 里面最常用的图像操作库是Image library(PIL),功能上,虽然还不能跟Matlab比较,但是还是比较强大的,废话补多少,写点记录笔记。

    1. 首先需要导入需要的图像库:

    import Image

    2. 读取一张图片:

    im=Image.open('/home/Picture/test.jpg')

    3. 显示一张图片:

    im.show()

    4. 保存图片:

    im.save("save.gif","GIF") #保存图像为gif格式

    5. 创建新图片:

    Image.new(mode,size)

    Image.new(mode,size,color)

    栗子:newImg = Image.new("RGBA",(640,480),(0,255,0))
    newImg.save("newImg.png","PNG")

    6.两张图片相加:

    Image.blend(img1,img2,alpha) # 这里alpha表示img1和img2的比例参数

    7. 点操作:

    im.point(function) #,这个function接受一个参数,且对图片中的每一个点执行这个函数
    比如:out=im.point(lambdai:i*1.5)#对每个点进行50%的加强

    8. 查看图像信息:
    im.format, im.size, im.mode

    9. 图片裁剪:
    box=(100,100,500,500)

    #设置要裁剪的区域

    region=im.crop(box) #此时,region是一个新的图像对象。

    10. 图像黏贴(合并)

    im.paste(region,box)#粘贴box大小的region到原先的图片对象中。

    11. 通道分离:
    r,g,b=im.split()#分割成三个通道,此时r,g,b分别为三个图像对象。

    12. 通道合并:
    im=Image.merge("RGB",(b,g,r))#将b,r两个通道进行翻转。

    13. 改变图像的大小:
    out=img.resize((128,128))#resize成128*128像素大小

    14. 旋转图像:
    out=img.rotate(45) #逆时针旋转45度

    有更方便的:
    region = region.transpose(Image.ROTATE_180)

    15. 图像转换:
    out = im.transpose(Image.FLIP_LEFT_RIGHT)

    #左右对换。

    out = im.transpose(Image.FLIP_TOP_BOTTOM)

    #上下对换

    16. 图像类型转换:
    im=im.convert("RGBA")

    17. 获取某个像素位置的值:
    im.getpixel((4,4))

    18. 写某个像素位置的值:
    img.putpixel((4,4),(255,0,0))

    转载地址:https://www.cnblogs.com/zhangheng1/p/9198528.html

    展开全文
  • 较全的python-Image模块功能

    千次阅读 2018-06-28 18:56:40
    Image模块还提供了许多工厂(factory)函数,包块从文件加载图像的函数,以及创建新图像的函数。 例子 下面的脚本加载了一个图像,并把它旋转了45度,然后调用外部的查看器(通常在Unix下是xv,Windows下是paint)...
  • Image模块的介绍创建一个新的图片Python代码 Image.new(mode, size) Image.new(mode, size, color) Image.new(mode, size)Image.new(mode, size, color) 层叠图片层叠两个图片,img2和img2,alpha是一个介于[0,1...
  • python Image模块安装

    万次阅读 2015-08-17 18:10:08
    我的系统是mac os x yosemite 10.10 一、下载源码包 http://www.pythonware.com/products/pil/index.htm 下载最新版的PIL安装程序 ,我下载的是tar xfz Imaging-1.1.7.tar.gz http://www.ijg.org 最新的版本...
  • Python图像处理库PIL的基本模块介绍

    万次阅读 2016-02-11 21:44:27
    PIL有如下几个模块:Image模块、ImageChops模块、ImageCrackCode模块、ImageDraw模块、ImageEnhance模块、ImageFile模块、ImageFileIO模块、ImageFilter模块、ImageFont模块、ImageGrab模块、ImageOps模块、...
  • python的Image模块导入踩坑

    千次阅读 2019-05-17 11:19:25
    最近在做pythonchallenge,做到16关的时候,需要导入Image模块 成功通过setuptools安装ok import Image 代码中直接这样导入,结果库里没有方法函数 百度查了半天,发现都是这样导入的没问题。 但我这样没法运行啊...
  • 整理了Python中关于Image模块的一些简单的图像处理操作
  • http_image_filter_module用来裁剪图片的,是nginx自带模块,默认不会开启 开启该模块需要在编译时要带上参数 --with-http_image_filter_module 这里比如在tomcat服务器下放个 test 目录存放图片,则可以 ...
  • 在运行一个深度学习网络的时候,需要用到cv2模块,但是,直接在pycharm中安装cv2模块时候,并没有显示这个模块。即cv2python3在pip中没有对应于python3的包,所以需要离线安装cv2模块。步骤一:在Python Extension ...
  • python找不到images模块的解决方法

    千次阅读 2012-02-18 21:22:03
    ImportError: No module named images 替换为 import wx.py.images as images 将  images.getNewBitmap 替换为  images.getPyBitmap()
  • python 图像读入 reshape尺寸时的问题

    万次阅读 2018-02-07 13:20:08
    可以用matplotlib模块中的image模块进行图像的读取 #coding=utf-8 import matplotlib.pyplot as plt import matplotlib.image as mimage image=mimage.imread('lala.jpg') print image.shape # show a picture...
  • 20181025matlab安装模块选择

    千次阅读 2018-10-25 20:04:19
    Matlab9.3 Control system Curve fitting toolbox 10.3 Fixed-point designr Global optimization ...Image Acquisition Image Processing Mapping Toolbox MATLAB Coder MATLAB Compiler MATLAB Compil...
  • 初试PIL

    万次阅读 2013-01-14 10:15:43
     把Python的基础知识学习后,尝试一下如何安装、加载、使用非标准库,选择了图像处理模块PIL。  Python Imaging Library (PIL)是PythonWare公司提供的免费的图像处理工具包,是python下的图像处理模块,支持多种...
  • android技巧:快速重建system.img

    万次阅读 2009-06-10 10:43:00
    修改android的系统模块后, 需要重新生成system.img, 以前我用make systemimage,但这个过程太慢了,很烦人。于是通过make输出的信息, 找到一个比较快的方法,只编译模块和生成system.img,省去其它过程,重新生成...
  •  今天在写python代码的时候,参考别人的代码,调用urllib中的request模块,并且调用此模块中的urlopen函数,但是好久都没有发现错误在哪里,之后我到urllib.py中寻找,并没有找到request这一模块,之后我又翻看了...
  • qrcode提供了生成各种二维码图像的接口,还提供了通过命令行生成二维码的方法
  • 由于需要导入图片识别文件pillow和tesserocr模块(tesserocr模块可以用来将图片的字符自动识别成文字) 然而开始了我艰难的一天: 一开始由于安装软件tesseract软件版本和模块tesserocr模块的不一致害得我研究了...
1 2 3 4 5 ... 20
收藏数 182,291
精华内容 72,916
关键字:

image模块