Python (三): PIL.Image基本图像处理

悠悠 2022-03-17 15:08 447阅读 0赞

Python 三: 图像处理

  • 需要 Import 的库
  • 基本操作
  • 新建, 裁剪, 缩放和粘贴
  • 旋转和翻转
  • 滤镜
  • 通道分离, 像素操作

需要 Import 的库

  1. from PIL import Image
  2. import numpy as np
  3. import matplotlib.pyplot as plot

以下所有代码都引用了上述三行代码

基本操作

  1. # 读取图片
  2. img = Image.open("./demo.jpg")
  3. # 获取图片的尺寸
  4. print(img.size)
  5. # > (32, 32)
  6. # 转化为灰度图
  7. grayscale = img.convert('L')
  8. # 转化为二值图
  9. binary = img.convert('1')
  10. # 显示图片
  11. plot.subplot(1, 3, 1)
  12. plot.imshow(img)
  13. plot.subplot(1, 3, 2)
  14. plot.imshow(grayscale)
  15. plot.subplot(1, 3, 3)
  16. plot.imshow(binary)
  17. plot.show()
  18. # np 数组 之间的互相转换
  19. img_array = np.array(img)
  20. img_img = Image.fromarray(img_array)
  21. # 保存图片
  22. binary.save('./binary.png')

91c164f5ly1g0hzivntlpj20xc0b43yt.jpg

新建, 裁剪, 缩放和粘贴

  1. im1 = Image.open("./demo.jpg") # im1 大小为 32 * 32
  2. # 新建一个 64 * 64 的灰度图, 默认填充 0
  3. im2 = Image.new('L', (64, 64), 0)
  4. # 在 im2 左上角粘贴 im1
  5. im2.paste(im1, (0, 0))
  6. # 在 im2 右上方粘贴 im2 的 (0,0) 到 (30, 30) 部分的图片
  7. im2.paste(im1.crop((0, 0, 30, 30)).resize((32, 32)), (32, 0))
  8. # 同上
  9. im2.paste(im1.crop((0, 0, 25, 25)).resize((32, 32)), (0, 32))
  10. # 同上
  11. im2.paste(im1.crop((0, 0, 18, 18)).resize((32, 32)), (32, 32))
  12. plot.imshow(im2)
  13. plot.show()

91c164f5ly1g0i0cclq7qj20zk0qo0td.jpg

旋转和翻转

  1. im = Image.open("./demo.jpg")
  2. # 旋转
  3. plot.subplot(2, 2, 1)
  4. plot.imshow(im1.rotate(90))
  5. plot.subplot(2, 2, 2)
  6. plot.imshow(im1.rotate(180))
  7. # 翻转
  8. plot.subplot(2, 2, 3)
  9. plot.imshow(im1.transpose(Image.FLIP_LEFT_RIGHT))
  10. plot.subplot(2, 2, 4)
  11. plot.imshow(im1.transpose(Image.FLIP_TOP_BOTTOM))
  12. plot.show()

91c164f5ly1g0i0kcd94pj20zk0qoq3x.jpg

滤镜

  1. from PIL import ImageFilter
  2. im = Image.open("./aragaki_yui.jpg")
  3. plot.subplot(2, 3, 1)
  4. plot.axis('off')
  5. plot.title('gaussian')
  6. plot.imshow(im.filter(ImageFilter.GaussianBlur))
  7. plot.subplot(2, 3, 2)
  8. plot.axis('off')
  9. plot.title('edge enhance')
  10. plot.imshow(im.filter(ImageFilter.EDGE_ENHANCE))
  11. plot.subplot(2, 3, 3)
  12. plot.axis('off')
  13. plot.title('find edges')
  14. plot.imshow(im.filter(ImageFilter.FIND_EDGES))
  15. plot.subplot(2, 3, 4)
  16. plot.axis('off')
  17. plot.title('sharpen')
  18. plot.imshow(im.filter(ImageFilter.SHARPEN))
  19. plot.subplot(2, 3, 5)
  20. plot.axis('off')
  21. plot.title('detail')
  22. plot.imshow(im.filter(ImageFilter.DETAIL))
  23. plot.subplot(2, 3, 6)
  24. plot.axis('off')
  25. plot.title('raw')
  26. plot.imshow(im)
  27. plot.show()

91c164f5ly1g0i0wcvek5j20zk0qoqbb.jpg

通道分离, 像素操作

  1. im = Image.open("./aragaki_yui.jpg")
  2. # 通道分离
  3. rgb = im.split()
  4. R, G, B = 0, 1, 2
  5. # 使用 lambda 表达式实现像素级操作
  6. rgb[R].paste(rgb[R].point(lambda x : x * 0.9))
  7. rgb[G].paste(rgb[G].point(lambda x : x * 0.9))
  8. rgb[B].paste(rgb[B].point(lambda x : x * 0.75))
  9. plot.subplot(1, 2, 1)
  10. plot.imshow(im)
  11. plot.subplot(1, 2, 2)
  12. plot.imshow(Image.merge(im.mode, rgb))
  13. plot.show()

91c164f5ly1g0i199ip4rj20zk0qo775.jpg

发表评论

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

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

相关阅读

    相关 图像处理基本算法

    使用openCV进行图像处理,总感觉并不能真正的理解图像处理的核心内容,因此我感觉对图像处理的理解才是关键。 基本的反色操作,主要是了解OpenCV对图像数据的操作方式:指针

    相关 数字图像处理基本概念

    1.邻域:数字图像中,邻域分为4邻域和8邻域,4邻域就是某个(x,y)点的上下左右四个点,8邻域再加上左上右上左下右下四个点。如果p在q周围的8个点内,就是p在q的8邻域内。