python PIL ImageOps,各种数据增强和图片效果展示 Python图像处理库PIL的ImageOps模块介绍 -----> 一些基本的图像操作

转载

Python图像处理库PIL的ImageOps模块介绍 -----> 一些基本的图像操作

         <!--一个博主专栏付费入口结束-->
        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
                                    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
            <div class="htmledit_views" id="content_views">

原文地址:http://blog.csdn.net/icamera0/article/details/50785776


原文博主的博客中有相当多的python图像处理操作介绍,如有需要,可移驾原博主博客:http://blog.csdn.net/icamera0?viewmode=contents


(Newin 1.1.3)ImageOps模块包含了一些“ready-made”的图像处理操作。这个模块somewhatexperimental,大多数操作只工作在L和RGB图像上。

一、ImageOps模块的函数

1、 Autocontrast

定义:ImageOps.autocontrast(image, cutoff=0)? image

含义:最大图像对比度。这个函数计算一个输入图像的直方图,从这个直方图中去除最亮和最暗的百分之cutoff,然后重新映射图像,以便保留的最暗像素变为黑色,即0,最亮的变为白色,即255。

例子:


  
  
  1. from PIL import Image, ImageOps
  2. im02 = Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg")
  3. im = ImageOps.autocontrast(im02, 20)

在图像im02中,去掉了原来直方图中最暗和最亮的各20%,剩下的像素值然后再映射到[0,255]的颜色空间上。

图像im如下:



2、 Colorize

定义:ImageOps.colorize(image, black, white)? image

含义:使得灰色图像变成彩色图像。变量black和white应该是RGB元组或者颜色名称。这个函数会计算出一个颜色值,使得源图像中的所有黑色变成第一种颜色,所有白色变成第二种颜色。变量image的模式必须为“L”。

例子:


  
  
  1. from PIL import Image, ImageOps
  2. im02 = Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg")
  3. r,g,b = im02.split()
  4. print r.mode
  5. >>> 'L'
  6. im_r = ImageOps.colorize(r, "green", "blue")
  7. im_b = ImageOps.colorize(b, ( 255, 0, 0), ( 0, 255, 0))
  8. im_g = ImageOps.colorize(g, ( 255, 0, 0), "blue")

图像im_r是图像im02中的R分量,通过函数colorize(),将其黑色像素转换为绿色,白色像素转换为蓝色。其效果如下:



图像im_g如下:




图像im_b如下:



3、 Crop

定义:ImageOps.crop(image, border=0)? image

含义:从图像的四个边去掉变量border定义的四元组对应的行/列。这个函数对所有图像模式有效。

例子:


  
  
  1. >>> from PIL import Image, ImageOps
  2. >>> im02 = Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg")
  3. >>> im0 = ImageOps.crop(im02, ( 0, 0, 400, 300))
  4. >>> im1 = ImageOps.crop(im02, ( 100, 100, 400, 300))
  5. >>> im2 = ImageOps.crop(im02, ( 200, 100, 400, 300))
  6. >>> im02.size
  7. ( 1024, 768)
  8. >>> im0.size
  9. ( 624, 468)
  10. >>> im1.size
  11. ( 524, 368)
  12. >>> im2.size
  13. ( 424, 368)

通过实验发现,变量border的四元组定义了左,上,右,下四个边上需要去掉的行/列数。图像im2对应的border为(200,100,400,300),即在图像im02的基础上,左边去掉200列,上面去掉100行,右侧去掉400列,下面去掉300行。最后图像im2的size为424x368。

图像im0如下:



图像im1如下:



图像im2如下:



4、 Deform

定义:ImageOps.deform(image, deformer, filter=Image.BILINEAR)? image

含义:使用给定的变形器对象改变图像。变形器需要提供一个getmesh()方法,它返回一个MESH列表适应图像transform方法。

例子:

暂时不清楚如何使用该函数。

5、 Equalize

定义:ImageOps.equalize(image)? image

含义:均衡图像的直方图。该函数使用一个非线性映射到输入图像,为了产生灰色值均匀分布的输出图像。

例子:


  
  
  1. >>> from PIL importImage, ImageOps
  2. >>> im02 =Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg")
  3. >>> im =ImageOps.equalize(im02)

图像im02直方图均衡后的效果如图像im所示:



6、 Expand

定义:ImageOps.expand(image, border=0, fill=0)? image

含义:

例子:


  
  
  1. >>> from PIL import Image,ImageOps
  2. >>> im02 =Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg")
  3. >>> im =ImageOps.expand(im02, ( 50, 100, 200, 300), fill= "red")
  4. >>> im.size
  5. ( 1274, 1168)

该函数与crop()函数正好相反,它按照变量border的四元组,在图像的左、上、右、下四个边,使用给定的颜色填充相应的行和列。

图像im为图像im02扩充之后的图像,其size变成了1274x1168。图像im如下:



7、 Fit

定义:ImageOps.fit(image, size, method, bleed, centering)? image

含义:返回一个指定大小的裁剪过的图像。该图像被裁剪到指定的宽高比和尺寸。变量size是要求的输出尺寸,以像素为单位,是一个(宽,高)元组。

变量method是用于重采样的方法。默认值为Image.NEAREST。

变量bleed允许用户去掉图像的边界(图像四个边界)。这个值是一个百分比数(0.01表示百分之一)。默认值是0(没有边界)。

变量centering用于控制裁剪位置。(0.5,0.5)是裁剪中心(例如,如果裁剪宽度,裁掉左侧50%(右侧50%),顶/底一样)。

(0.0,0.0)将从左上角开始裁剪(例如,如果裁剪宽度,将从右边裁剪掉所要裁剪的部分;如果裁剪高度,将从底部裁剪掉所要裁剪的部分)。

(1.0,0.0)将从左下角开始裁剪。(如果裁剪宽度,将从左边裁剪掉所要裁剪的部分;如果裁剪高度,将从底部裁剪掉所要裁剪的部分)

例子:


  
  
  1. >>> from PIL import Image, ImageOps
  2. >>> im02 = Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg")
  3. >>> im0 = ImageOps.fit(im02, ( 500, 300), Image.BICUBIC, 0.1, ( 0.0, 0.0))
  4. >>> im1 = ImageOps.fit(im02, ( 500, 300), Image.BICUBIC, 0.1, ( 1.0, 1.0))
  5. >>> im2 = ImageOps.fit(im02, ( 500, 300), Image.BICUBIC, 0.1, ( 0.0, 1.0))
  6. >>> im3 = ImageOps.fit(im02, ( 500, 300), Image.BICUBIC, 0.1, ( 1.0, 0.0))

从实验结果看,图像im0/im3是从底部开始裁剪,而图像im1/2是从顶部开始裁剪。它们的size均为500x300。

图像im0如下:



图像im1如下:



图像im2如下:



图像im3如下:



8、 Flip

定义:ImageOps.flip(image)? image

含义:输出图像为输入图像在垂直方向的镜像(顶部跟底部对调)。

例子:


  
  
  1. >>> from PIL importImage, ImageOps
  2. >>> im02= Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg")
  3. >>> im= ImageOps.flip(im02)

图像im为图像02垂直方向的镜像,图像im如下:



9、 Grayscale

定义:ImageOps.grayscale(image)? image

含义:将输入图像转换为灰色图像。

例子:


  
  
  1. >>> from PIL import Image, ImageOps
  2. >>>im02 = Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg")
  3. >>> im= ImageOps.grayscale(im02)
  4. >>>im.mode
  5. 'L'

图像im为图像02对应的灰色图像,图像im如下:



10、Invert

定义:ImageOps.invert(image)? image

含义:将输入图像转换为反色图像。

例子:


  
  
  1. >>> from PIL import Image, ImageOps
  2. >>>im02 = Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg")
  3. >>> im= ImageOps.invert(im02)

图像im为图像02对应的反色图像,图像im如下:



11、Mirror

定义:ImageOps.mirror(image)? image

含义:输出图像为输入图像水平方向的镜像。

例子:


  
  
  1. >>> from PIL import Image, ImageOps
  2. >>>im02 = Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg")
  3. >>> im= ImageOps.mirror(im02)

图像im为图像im02的水平方向的镜像,图像im如下:



12、Posterize

定义:ImageOps.posterize(image,bits)? image

含义:将每个颜色通道上变量bits对应的低(8-bits)个bit置0。变量bits的取值范围为[0,8]。

例子:


  
  
  1. >>> from PIL import Image, ImageOps
  2. >>>im02 = Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg")
  3. >>>im02.getpixel(( 0, 0))
  4. ( 124, 127, 108)
  5. >>> im2= ImageOps.posterize(im02, 2)
  6. >>>im2.getpixel(( 0, 0))
  7. ( 64, 64, 64)
  8. >>> im3= ImageOps.posterize(im02, 3)
  9. >>>im3.getpixel(( 0, 0))
  10. ( 96, 96, 96)
  11. >>> im5= ImageOps.posterize(im02, 5)
  12. >>>im5.getpixel(( 0, 0))
  13. ( 120, 120, 104)

当变量bits为2时,将每个颜色通道的像素值低6bit清0,保留剩下的2 bit位。即124=二进制1111100,其处置之后为,二进制1000000=32。

图像im2如下:



13、Solarize

定义:ImageOps.solarize(image,threshold=128)? image

含义:在指定的阈值范围内,反转所有的像素点。

例子:


  
  
  1. >>> from PIL import Image, ImageOps
  2. >>>im02 = Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg")
  3. >>>im02.getpixel(( 0, 0))
  4. ( 124, 127, 108)
  5. >>> im0= ImageOps.solarize(im02, 100)
  6. >>> im1= ImageOps.solarize(im02, 200)
  7. >>> im0.getpixel(( 0, 0))
  8. ( 131, 128, 147)
  9. >>> im1.getpixel(( 0, 0))
  10. ( 124, 127, 108)

图像im0的第一个像素点红色通道值为131=二进制10000011,图像im02的第一个像素点红色通道值为124=二进制1111100。Im0的值为im02的值所有位取反。图像im0中阈值为100,即大于100的值都需要做反转。图像im1的阈值为200,所以第一个像素点的值都没有变化。

图像im0如下:



图像im1如下:






文章最后发布于: 2017-05-21 20:26:40
发布了98 篇原创文章 · 获赞 141 · 访问量 26万+
         <!--一个博主专栏付费入口结束-->
        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
                                    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
            <div class="htmledit_views" id="content_views">

猜你喜欢

转载自blog.csdn.net/m0_37192554/article/details/103269507