PIL(Python Image Library)常用操作简介
2017-08-25 11:48
976 查看
Basic Operations
因为我有点儿懒。。。所以本篇后续就基本是英文了(输入法切换好累0.0),本教程配套有Jupyter Notebook,请在此处下载。Python3 based PIL(python image library) tutorials from Documents
from PIL import ImageFilter from PIL import Image import numpy as np import matplotlib import matplotlib.pyplot as plt
im = Image.open("test.jpg") print('format: ', im.format) print('size: ', im.size) print('mode: ', im.mode) im.show() # show the figure in photo viewer
format: JPEG
size: (625, 625)
mode: RGB
Cut A Certain Region
box = (100, 100, 400, 400) region = im.crop(box) # region.show() plt.imshow(region) plt.show()
Rotate
box = (100, 100, 400, 400) region = im.crop(box) region = region.transpose(Image.ROTATE_180) im.paste(region, box) # im.show() plt.imshow(im) plt.show()
Splitting and Merging Bands
im = Image.open("test.jpg") r, g, b = im.split() # r.show() # g.show() # b.show() f, ax = plt.subplots(2, 2) ax[0, 0].imshow(r) ax[0, 0].set_title("R") ax[0, 1].imshow(g) ax[0, 1].set_title("G") ax[1, 0].imshow(b) ax[1, 0].set_title("B") im = Image.merge("RGB", (g, b, r)) ax[1, 1].imshow(im) ax[1, 1].set_title("Mixed Image") plt.show()
Geometrical Transforms
im = Image.open("test.jpg") out = im.resize((128,128)) f, ax = plt.subplots(2, 4) ax[0, 0].imshow(out) out = im.rotate(45) # degrees counter-clockwise, black background if empty ax[0, 1].imshow(out) out = im.transpose(Image.FLIP_LEFT_RIGHT) ax[0, 2].imshow(out) out = im.transpose(Image.FLIP_TOP_BOTTOM) ax[0, 3].imshow(out) out = im.transpose(Image.ROTATE_90) ax[1, 0].imshow(out) out = im.transpose(Image.ROTATE_180) ax[1, 1].imshow(out) out = im.transpose(Image.ROTATE_270) ax[1, 2].imshow(out) plt.show()
Colour Transform
""" The official explanation of convert: | convert(self, mode=None, matrix=None, dither=None, palette=0, colors=256) | Returns a converted copy of this image. For the "P" mode, this | method translates pixels through the palette. If mode is | omitted, a mode is chosen so that all information in the image | and the palette can be represented without a palette. | | The current version supports all possible conversions between | "L", "RGB" and "CMYK." The **matrix** argument only supports "L" | and "RGB". | | When translating a color image to black and white (mode "L"), | the library uses the ITU-R 601-2 luma transform:: | | L = R * 299/1000 + G * 587/1000 + B * 114/1000 | | The default method of converting a greyscale ("L") or "RGB" | image into a bilevel (mode "1") image uses Floyd-Steinberg | dither to approximate the original image luminosity levels. If | dither is NONE, all non-zero values are set to 255 (white). To | use other thresholds, use the :py:meth:`~PIL.Image.Image.point` | method. | | :param mode: The requested mode. See: :ref:`concept-modes`. | :param matrix: An optional conversion matrix. If given, this | should be 4- or 12-tuple containing floating point values. | :param dither: Dithering method, used when converting from | mode "RGB" to "P" or from "RGB" or "L" to "1". | Available methods are NONE or FLOYDSTEINBERG (default). | :param palette: Palette to use when converting from mode "RGB" | to "P". Available palettes are WEB or ADAPTIVE. | :param colors: Number of colors to use for the ADAPTIVE palette. | Defaults to 256. | :rtype: :py:class:`~PIL.Image.Image` | :returns: An :py:class:`~PIL.Image.Image` object. """ im = Image.open("test.jpg") gray_im = im.convert("L") plt.imshow(gray_im) plt.show()
Image Filter
from PIL import ImageFilter im = Image.open("test.jpg") plt.imshow(im) plt.title('Original Figure') plt.show()
im = Image.open("test.jpg") out = im.filter(ImageFilter.BLUR) f, (ax1, ax2) = plt.subplots(1, 2, sharey=True) ax1.imshow(im) ax1.set_title('Original Figure') ax2.imshow(out) ax2.set_title('Image Filter BLUR') plt.imshow(out) plt.show()
im = Image.open("test.jpg") out = im.filter(ImageFilter.CONTOUR) f, (ax1, ax2) = plt.subplots(1, 2, sharey=True) ax1.imshow(im) ax1.set_title('Original Figure') ax2.imshow(out) ax2.set_title('Image Filter CONTOUR') plt.imshow(out) plt.show()
im = Image.open("test.jpg") out = im.filter(ImageFilter.DETAIL) f, (ax1, ax2) = plt.subplots(1, 2, sharey=True) ax1.imshow(im) ax1.set_title('Original Figure') ax2.imshow(out) ax2.set_title('Image Filter DETAIL') plt.imshow(out) plt.show()
im = Image.open("test.jpg") out = im.filter(ImageFilter.EDGE_ENHANCE) f, (ax1, ax2) = plt.subplots(1, 2, sharey=True) ax1.imshow(im) ax1.set_title('Original Figure') ax2.imshow(out) ax2.set_title('Image Filter EDGE_ENHANCE') plt.imshow(out) plt.show()
im = Image.open("test.jpg") out = im.filter(ImageFilter.EDGE_ENHANCE_MORE) f, (ax1, ax2) = plt.subplots(1, 2, sharey=True) ax1.imshow(im) ax1.set_title('Original Figure') ax2.imshow(out) ax2.set_title('Image Filter EDGE_ENHANCE_MORE') plt.imshow(out) plt.show()
im = Image.open("test.jpg") out = im.filter(ImageFilter.EMBOSS) f, (ax1, ax2) = plt.subplots(1, 2, sharey=True) ax1.imshow(im) ax1.set_title('Original Figure') ax2.imshow(out) ax2.set_title('Image Filter EMBOSS') plt.imshow(out) plt.show()
im = Image.open("test.jpg") out = im.filter(ImageFilter.FIND_EDGES) f, (ax1, ax2) = plt.subplots(1, 2, sharey=True) ax1.imshow(im) ax1.set_title('Original Figure') ax2.imshow(out) ax2.set_title('Image Filter FIND_EDGES') plt.imshow(out) plt.show()
im = Image.open("test.jpg") out = im.filter(ImageFilter.SMOOTH) f, (ax1, ax2) = plt.subplots(1, 2, sharey=True) ax1.imshow(im) ax1.set_title('Original Figure') ax2.imshow(out) ax2.set_title('Image Filter SMOOTH') plt.imshow(out) plt.show()
im = Image.open("test.jpg") out = im.filter(ImageFilter.SMOOTH_MORE) f, (ax1, ax2) = plt.subplots(1, 2, sharey=True) ax1.imshow(im) ax1.set_title('Original Figure') ax2.imshow(out) ax2.set_title('Image Filter SMOOTH_MORE') plt.imshow(out) plt.show()
im = Image.open("test.jpg") out = im.filter(ImageFilter.SHARPEN) f, (ax1, ax2) = plt.subplots(1, 2, sharey=True) ax1.imshow(im) ax1.set_title('Original Figure') ax2.imshow(out) ax2.set_title('Image Filter SHARPEN') plt.imshow(out) plt.show()
Point Transform
im = Image.open("test.jpg") out = im.point(lambda i: i*1.2) f, (ax1, ax2) = plt.subplots(1, 2, sharey=True) ax1.imshow(im) ax1.set_title('Original Figure') ax2.imshow(out) ax2.set_title('Point 1.2') plt.imshow(out) plt.show()
Processing Individual Bands
im = Image.open("test.jpg") # 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 < 220 and i > 100) plt.imshow(mask) # process the green band out = source[G].point(lambda i: i * 0.7) # plt.imshow(out) # 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) # plt.imshow(im) plt.show()
im = Image.open("point.jpg") im_point = im.crop((0, 250, 1000, 1670)) # split the image into individual bands source = im_point.split() R, G, B = 0, 1, 2 f, ax = plt.subplots(1, 5, sharey=True) # select regions where red is less than 100 mask1 = source[R].point(lambda i: i > 215 and i < 250) # plt.imshow(mask) ax[0].imshow(mask1) # process the green band mask a1af 2 = source[G].point(lambda i: i > 200 and i < 204) # plt.imshow(mask2) ax[1].imshow(mask2) mask3 = source[B].point(lambda i: i > 206 and i < 215) # plt.imshow(mask3) ax[2].imshow(mask3) # paste the processed band back, but only where red was < 100 # source[G].paste(mask2, None, mask1) # build a new multiband image mask_logic = (np.array(mask1).astype(bool) & np.array(mask2).astype(bool) & np.array(mask3).astype(bool)) ax[3].imshow(mask_logic) ax[4].imshow(im_point) plt.show()
Convert to JPEG Format
import os, sys from PIL import Image for infile in sy.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)
相关文章推荐
- Python学习之day5(一)字符串常用操作命令简介
- PIL(Python Image Library) 1.1.16中对像素操作的加速
- python中PIL库的常用操作
- python dict常用方法简介
- Python脚本控制的WebDriver 常用操作 <十一> 操作测试对象
- 华为软件精英竞赛 python常用操作
- python 对文件的常用操作(一)
- 常用Python第三方库 简介【转载
- STL map常用操作简介
- 【转】python win32api win32gui win32con 简单操作教程(窗口句柄 发送消息 常用方法 键盘输入)
- python 中str 常用操作
- python文件、文件夹常用操作
- Python中shutil模块的常用文件操作函数用法示例
- python selenium常用基本方法---H5和键盘鼠标操作
- Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
- Python PyCharm常用的基本快捷键和配置简介
- Python脚本控制的WebDriver 常用操作 <二十四> 定位frame中的元素
- Python3.5——字符串常用操作
- Python字典的常用操作
- python常用的正则表达式操作