↑ 关注 + 星标 ,后台回复【大礼包】送你2TPython自学资料
好消息:Python学习交流群,已经建立,猛戳加入

今天使用 NumPy 和 PIL 处理一幅图像,先介绍 3 种最基本的玩法,目的是希望通过此文建立图像处理的基本概念,算是一个图像处理的基本入门。
1 PIL 导入图像
首先使用 PIL 导入我们待处理的图像。
from PIL import Image
import numpy as np
im = Image.open("jianzhu.jpg")
im.show()
显示结果:

打印 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()
得到裁剪后的图像:

以上介绍主要包括:
- 使用 PIL 导入图像,NumPy 转为数组
- NumPy 分离颜色通道
- NumPy 裁剪图像
推荐两个团队技术号
Github研习社:目前是由国内985博士,硕士组成的团体发起并运营,主要分享和研究业界开源项目,学习资源,程序设计,学术交流。回复就无套路送你一份自学大礼包。
机器学习研习社目前是由国内985博士,硕士组成的团体发起并运营。主要分享和研究机器学习、深度学习、NLP 、Python,大数据等前沿知识、干货笔记和优质资源。回复就无套路送你一份机器学习大礼包。推荐阅读再见,“阿里三代掌门人”蒋凡!如果你觉得文章有帮助,点个“好看”
本文介绍了使用Python的PIL库导入图像,并通过NumPy将其转换为数组进行处理。内容包括将图像的RGB通道分离以及进行图像裁剪的基础操作,帮助初学者建立图像处理的基本概念。

被折叠的 条评论
为什么被折叠?



