【转】python图片处理1:打开\显示\保存图像

使用python进行数字图片处理,需要安装Pillow包, 它是由PIL发展而来的。

pip install Pillow

1、图片打开、显示

from PIL import Image
img=Image.open('**.png')#相对路径
#img=Image.open('d:/***/**.png')#绝对路径
img.show()

这种图片显示方式是调用操作系统自带的图片浏览器来打开图片,有些时候这种方式不太方便,因此我们也可以使用另上一种方式,让程序来绘制图片。

from PIL import Image
import matplotlib.pyplot as plt
img=Image.open('**.png')
plt.figure("dog")
plt.imshow(img)
plt.show()

使用一个matplotlib的库来绘制图片进行显示。
matplotlib是一个专业绘图的库,相当于matlab中的plot,可以设置多个figure,并设置figure的信息,可以使用subplot在一个figure中显示多张图片。
figure默认是带axis的,如果没有需要,我们可以关掉
plt.axis('off')
打开图片后,可以使用一些属性来查看图片信息,如

print img.size  #图片的尺寸(width, height)
print img.mode  #图片的模式RGBA
print img.format  #图片的格式PNG

2、图片保存

img.save('f:/***/***.jpg')

3、图片处理

1、图片模式转换convert()

img=Image.open('d:/ex.jpg')
gray=img.convert('L')

使用函数convert()来进行转换,它是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式,mode 的取值可以是
|

mode含义
11位像素,黑白,每字节一个像素存储
L8位像素,黑白
P8位像素,使用调色板映射到任何其他模式
P
RGB3x8位像素,真彩色
RGBA4x8位像素,带透明度掩模的真彩色
CMYK4x8位像素,分色
YCbCr3x8位像素,彩色视频格式
I32位有符号整数像素
F32位浮点像素

2、通道分离与合并

from PIL import Image
import matplotlib.pyplot as plt
img=Image.open('d:/ex.jpg')  #打开图像
gray=img.convert('L')   #转换成灰度
r,g,b=img.split()   #分离三通道
pic=Image.merge('RGB',(r,g,b)) #合并三通道
#显示
plt.figure("beauty")
plt.subplot(2,3,1), plt.title('origin')
plt.imshow(img),plt.axis('off')
plt.subplot(2,3,2), plt.title('gray')
plt.imshow(gray,cmap='gray'),plt.axis('off')
plt.subplot(2,3,3), plt.title('merge')
plt.imshow(pic),plt.axis('off')
plt.subplot(2,3,4), plt.title('r')
plt.imshow(r,cmap='gray'),plt.axis('off')
plt.subplot(2,3,5), plt.title('g')
plt.imshow(g,cmap='gray'),plt.axis('off')
plt.subplot(2,3,6), plt.title('b')
plt.imshow(b,cmap='gray'),plt.axis('off')
plt.show()

在这里插入图片描述

3.裁剪图片
从原图片中裁剪感兴趣区域(roi),裁剪区域由4-tuple决定,该tuple中信息为(left, upper, right, lower)。 Pillow左边系统的原点(0,0)为图片的左上角。坐标中的数字单位为像素点。

from PIL import Image
import matplotlib.pyplot as plt
img=Image.open('d:/ex.jpg')  #打开图像
plt.figure("beauty")
plt.subplot(1,2,1), plt.title('origin')
plt.imshow(img),plt.axis('off')

box=(80,100,260,300)#裁剪框
roi=img.crop(box)#裁剪图片
plt.subplot(1,2,2), plt.title('roi')
plt.imshow(roi),plt.axis('off')
plt.show()

在这里插入图片描述
注:用plot绘制显示出图片后,将鼠标移动到图片上,会在右下角出现当前点的坐标,以及像素值。

4、几何变换

Image类有resize()、rotate()和transpose()方法进行几何变换。
1、图像的缩放和旋转

dst = img.resize((128, 128))
dst = img.rotate(45) # 顺时针角度表示

2、转换图像

dst = im.transpose(Image.FLIP_LEFT_RIGHT) #左右互换
dst = im.transpose(Image.FLIP_TOP_BOTTOM) #上下互换
dst = im.transpose(Image.ROTATE_90)  #顺时针旋转90度
dst = im.transpose(Image.ROTATE_180) #顺时针旋转180度
dst = im.transpose(Image.ROTATE_270) #顺时针旋转270度

参考:
https://www.cnblogs.com/denny402/p/5096491.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值