↑ 关注 + 星标 ,后台回复【大礼包】送你2TPython自学资料
好消息:Python学习交流群,已经建立,猛戳加入
今天使用 NumPy 和 PIL 处理一幅图像,先介绍 3 种最基本的玩法,目的是希望通过此文建立图像处理的基本概念,算是一个图像处理的基本入门。
1 PIL 导入图像
首先使用 PIL 导入我们待处理的图像。
from PIL import Image
import numpy as np
im = Image.open("jianzhu.jpg")
im.show()
显示结果:
![3f4a5103474b7bab5451bb2ba0e56565.png](https://i-blog.csdnimg.cn/blog_migrate/ac8e96bd87b881be10c790dc2d968eba.png)
打印 im 对象类型:
type(im)
im
类型为:
PIL.JpegImagePlugin.JpegImageFile
我们使用 NumPy 将其转化为 array:
img = np.array(im) # image类 转 numpy
img[:3] # 打印前三行
结果为:
array([[[197, 208, 226],
[197, 208, 226],
[198, 209, 227],
...,
[216, 213, 222],
[207, 208, 226],
[203, 210, 228]],
[[201, 212, 230],
[201, 212, 230],
[202, 213, 231],
...,
[203, 190, 182],
[213, 204, 205],
[205, 203, 204]],
[[196, 207, 225],
[196, 207, 225],
[196, 207, 225],
...,
[152, 131, 102],
[158, 141, 121],
[141, 130, 108]]], dtype=uint8)
打印 img 的 shape :
img.shape
(1120, 1494, 3):分别表示图像的高、宽、3个颜色(RGB)通道。
2 分离通道
如何直观理解 RGB 三个颜色通道呢?我们使用 NumPy 尝试分离 3 个颜色通道。
tmp_img0 = np.zeros(img.shape,dtype='uint8')
tmp_img0[:,:,0] = img[:,:,0] # 提取第一个通道
tmp_im0=Image.fromarray(tmp_img0) # numpy 转 image类
tmp_im0.show()
显示结果,红色背景,符合预期:
同理分别分离出第二颜色通道:
tmp_img1 = np.zeros(img.shape,dtype='uint8')
tmp_img1[:,:,1] = img[:,:,1]
tmp_im1=Image.fromarray(tmp_img1) # numpy 转 image类
tmp_im1.show()
第三颜色通道:
tmp_img2 = np.zeros(img.shape,dtype='uint8')
tmp_img2[:,:,2] = img[:,:,2]
tmp_im2=Image.fromarray(tmp_img2) # numpy 转 image类
tmp_im2.show()
3 裁剪图像
我们直接切片 img 数组,
img_slice = img[500:1000,300:700,:] # 切片图像
img_slice2 = Image.fromarray(img_slice)
img_slice2.show()
得到裁剪后的图像:
![dc62eee40da87d243459ed8ca3f8b754.png](https://i-blog.csdnimg.cn/blog_migrate/f803f497aa9b1462828ec8b27f3d3fec.png)
以上介绍主要包括:
- 使用 PIL 导入图像,NumPy 转为数组
- NumPy 分离颜色通道
- NumPy 裁剪图像
推荐两个团队技术号
Github研习社:目前是由国内985博士,硕士组成的团体发起并运营,主要分享和研究业界开源项目,学习资源,程序设计,学术交流。回复就无套路送你一份自学大礼包。
机器学习研习社目前是由国内985博士,硕士组成的团体发起并运营。主要分享和研究机器学习、深度学习、NLP 、Python,大数据等前沿知识、干货笔记和优质资源。回复就无套路送你一份机器学习大礼包。
推荐阅读再见,“阿里三代掌门人”蒋凡!
如果你觉得文章有帮助,点个“好看”