PIL 图像处理基础

浅浅的花香味﹌ 2023-07-23 03:59 99阅读 0赞

1、图像基本知识

1.1常见图像

• 灰度图像:L = R * 299/1000 + G * 587/1000 + B * 114/1000。
• RGB 图像:真彩色图像,由 RGB 三原色调制而成。
• RGBA:带阿尔法通道的彩色图像,用于 mask 运算,常用语 ico 图片。
• JPEG 格式:目前最常见的图片格式,它诞生于 1992 年,是一个很古老的格
式。它只支持有损压缩,其压缩算法可以精确控制压缩比,以图像质量换
得存储空间。由于它太过常见,以至于许多移动设备的 CPU 都支持针对它
的硬编码与硬解码。
• PNG:PNG 只支持无损压缩,所以它的压缩比是有上限的。相对于 JPEG 和
GIF 来说,它最大的优势在于支持完整的透明通道。

1.2图像格式

2、几何变换

Ø 原图
在这里插入图片描述
Ø 单通道
在这里插入图片描述
Ø RGB 某一个通道空白
在这里插入图片描述
Ø HSV 空间
在这里插入图片描述

2.1图像坐标系

像素取值范围在 0-255 之间的无符号整数
在这里插入图片描述

2.2仿射变换

图像处理中,可应用仿射变换对二维图像进行平移、缩放、旋转等操作。实例如
下:
在这里插入图片描述
经仿射变换后,图像关键点依然构成三角形,但三角形形状已经发生变化。
以旋转为例
在这里插入图片描述在这里插入图片描述仿射变换通过一系列原子变换复合实现,具体包括:平移(Translation)、缩放
(Scale)、旋转(Rotation)、翻转(Flip)和错切(Shear)。
a) 平移
在这里插入图片描述b) 缩放
在这里插入图片描述
c) 旋转
在这里插入图片描述
d) 翻转
在这里插入图片描述

e) 错切
在这里插入图片描述

3、PIL 图像处理

4、代码实例

4.1 改变大小

  1. from PIL import Image
  2. im = Image.open("./data/Lenna.png")
  3. region = im.resize((1024, 1024)) ##重新设定大小
  4. region.show()
  5. #im.thumbnail((100,100))
  6. #im.show()
  7. box = (100, 100, 300, 300) ##确定拷贝区域大小
  8. region = im.crop(box) ##将im表示的图片对象拷贝到region中,大小为box
  9. region.show()
  10. im1 = im.rotate(90) #旋转90度
  11. print(im.mode, im.size)
  12. im2 = Image.blend(im1, im, 0.2)#
  13. im2.show()

4.2 灰度图

  1. from PIL import Image
  2. im = Image.open("./data/Lenna.png")
  3. print(im.format, im.size, im.mode)
  4. im = im.convert('L') #RGB转为灰度图,其他值如下图
  5. print(im.mode)
  6. im.save('./data/Lenna.jpg')# 灰度图
  7. im.show()

在这里插入图片描述
mode为1(如下图)
在这里插入图片描述
4.3旋转

  1. from PIL import Image
  2. im = Image.open("./data/Lenna.png")
  3. im_45 = im.rotate(45)#不补全
  4. im_30 = im.rotate(30, Image.NEAREST,1)#参数1,表示放大图片,根据近邻点补全(如下图补黑色的部分)
  5. print(im_45.size,im_30.size)
  6. im_45.show()
  7. im_30.show()

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzY3MzE1Ng_size_16_color_FFFFFF_t_70 13在这里插入图片描述
4.4缓存

  1. import io
  2. from PIL import Image
  3. import base64
  4. #Base64编码
  5. im = Image.open("./data/Lenna.png")
  6. buffer = io.BytesIO()# io通道
  7. im.save(buffer, 'JPEG')
  8. binary_data = buffer.getvalue()
  9. base64_data = base64.b64encode(binary_data)
  10. print(base64_data)#b'/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGB...
  11. #解码显示
  12. byte_data = base64.b64decode(base64_data)
  13. image_data = io.BytesIO(byte_data)
  14. img = Image.open(image_data)
  15. img.show()

4.5通道Channel

  1. from PIL import Image
  2. im = Image.open("./data/Lenna.png")
  3. r,g,b = im.split()
  4. print(r.mode)# L
  5. print(r.size)# (512,512)
  6. # print(r)
  7. print(im.size)# (512,512)
  8. im_merge = Image.merge("RGB", [r,g,b])# 合并
  9. im_merge.show()
  10. sequ = im.getdata()
  11. sequ0 = list(sequ)
  12. print(sequ0[0])
  13. print(sequ0[1])
  14. print(len(sequ0))#
  15. print(im.getpixel((0,0)))#某一点的像素
  16. print(im.getpixel((0,1)))
  17. print(b.getpixel((0,0)))#二维的

发表评论

表情:
评论列表 (有 0 条评论,99人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PIL图像处理-二值化

    时隔很久才知道原来这种对图像的处理方式叫做二值化!什么是二值化呢?就是把一张图的像素点编程0或255,完全的白或黑。 比如这么一张32\32的小图片(当然他已经是黑白的了)