Pillow image基本命令,使用 Python pillow 让图片变成你想要的样子

目录

  1. 基本操作
  2. 查看图像信息
  3. 查看图像的像素值
  4. 图像保存
  5. 图像角度的装换
  6. 图像的裁剪与粘贴
  7. 图像的像素 增强减弱
  8. 图像样式 色调
  9. 图像帧操作


  • Python lmaging Library(PIL)是 python 下的图像处理模块,支持多种格式,并提供了强大的图像处理功能,可以通过 pip 进行安装。

  • PIL 模块的官方版本只支持 Python2,pillow 完美支持 Python3

pillow

Pillow 是 PIL 的一个派生分支,但如今已经发展成为比 PIL 本身更具活力的图像处理库。pillow 可以说已经取代了 PIL,将其封装成python的库(pip即可安装),且支持 python2 和 python3

Pillow的Github主页:https://github.com/python-pillow/Pillow 

Pillow的文档(对应版本v3.0.0): 

https://pillow.readthedocs.org/en/latest/handbook/index.html

基本操作

# 下载安装
pip install pillow

# python2 
import Image
 
# python3(因为是派生的PIL库,所以要导入PIL中的Image) 
from PIL import Image

# 打开图像文件
im = Image.open('sample.jpg')    # 这个对象 会在下面多次的用到

# 生成新图像文件
im = Image.new('RGB', (200, 100), (255, 255, 255))

# 显示图像
im.show()


查看图像信息


# 查看图像的信息
print(im.format)

print(im.size)   # 大小

# 查看图像直方图,图像如果是 RGB 则返回三组数,如果是灰度图则 返回一组数
print(im.histogram())

灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。


查看图像 像素值

# 读取图片的像素值
print(im.getpixel((100, 50)))   # 100, 50 是指定图片的位置的颜色 像素值

# 如果说彩色图像 那么返回的就是一个元组
(124, 126, 123)   # 红绿蓝 颜色的三个分量

# 如果是 灰度图像那么返回的就是一个数值
87

# 设置像素值
im.putpixel((100, 50), (128, 30, 120))    # 设置该图片指定位置的 RGB 颜色值

# 如果是灰度图像 那么只需要设置一个值


图像保存


# 保存图像文件
im.save('新名字.jpg')

# 转换图像格式
im.save('名字.你改的格式')

图像的角度转换

# 图像缩放
im_1 = im.resize((100, 100))     # 返回的是新图像,我们需要保存下来


# 逆时针旋转图像,rotate 方法支持任意角度的旋转,
# 而transpose方法支持部份特殊角度的旋转,如 90、180、270以及水平、垂直翻转

im_2 = im.rotate(90)     # l < 0 < r

im_3 = im.transpose(Image.ROTATE_180)

im_3 = im.transpose(Image.FLIP_LEFT_RIGHT)   # 左右水平 旋转

im_3 = im.transpose(Image.FLIP_TOP_BOTTOm)   # 上下水平 翻转

图像的裁剪与粘贴

from PIL import Image
im = Image.open('sample.jpg')


box = (120, 194, 220, 294)

# 在原图片将 box 区域裁剪下来
region = im.crop(box)      # region也是 img 对象哦,所以就可以使用 图像对象的所有方法 ↓ 例

# 将裁剪下来的图片 翻转180 (倒过来了)
region = region.transpose(Image_ROTATE_180)

# 原图片粘贴: 翻转后的图片 粘贴到 原图片的 box 区域上    注: 这里是粘贴,不是修补
im.paste(region, box)

im.show()

图像 像素增强减弱 ImageFilter

# 将色彩图像分离为红、绿、蓝 三分量子图,分离后每个图像大小与原图像一样,但是只包含一个颜色分量
r, g, b = im.split()

# 图像增强
from PIL import ImageFilter
im_4 = im.filter(ImageFilter.DETAIL)

# 图像模糊
im_4 = im.filter(ImageFilter.BLUR)

# 图像边缘提取
im_4 = im.filter(ImageFilter.FIND_EDGES)

# 别忘了
im_4.show()

图像样式 色调

  • point
    点分制图像
  • ImageEnhance
    图像增强模块
  • merge
    子图合并图像
# 图像的点运算,整体 变亮 / 变暗 
im_5 = im.point(lambda i:i*1.3)

im_5 = im.point(lambda i:i*0.7)

--------------------- ↑ ↓两者都可以实现 ----------------------

# 使用图像增强模块来调整亮度
from PIL import ImageEnhance

enh = ImageEngance.Brightness(im)
enh.enhance(1.3).show()


# 图像对比度增强
im = Image.open('sample.jpg')
im.show()

from PIL import ImageEnhance

enh = ImageEnhance.Contrast(im)
enh.enhance(1.3).show()


# 图像冷暖色调的调整
r, g, b = im.split()     # 将图片分割成 红绿蓝 三个

r = r.point(lambda i:i*1.3)    # 红色增强
g = g.point(lambda i:i*0.9)	   # 绿色减弱
b = b.point(lambda i:0)        # 蓝色减为 0

im_6 = Image.merge(im.mode, (r, g, b))    # merge合并

im_6.show()

图像帧操作

# 将 gif图片 一帧一帧的抓取为图片
im = Image.open('test.gif')

try: 
	while True:
		current = im.tell()       # 获取img对象的 帧图片

		im.save()       # 保存
		im.seek(current + 1)     # seek的作用就相当于 装饰器的 next,代表下一个

except EOFError:
	pass

发布了91 篇原创文章 · 获赞 174 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_44685869/article/details/104785400
今日推荐