python处理图像
将图片转换为向量
所需的库:
在python3的环境之下,PIL库改名为为pillow
conda install pillow
from PIL import Image
import numpy as np
导入本地图片,img为临时存储对象
img = Image.open(path)
因为有些图片读取后不止gbk三个通道,所以我们可以先运行一次下面的代码,查看各通道
print(img.split())
(<PIL.Image.Image image mode=L size=84x225 at 0x10278C50>,
<PIL.Image.Image image mode=L size=84x225 at 0x102E1F28>,
<PIL.Image.Image image mode=L size=84x225 at 0x102F3550>,
<PIL.Image.Image image mode=L size=84x225 at 0x102F3A20>)
表明该图具有四个通道,每个通道的size为84x225
获取每个通道
g,b,k,d = img.split()
每个通道 g,b,k,d可单独输出显示其通道下的图像,
注: 笔者发现虽然获得的是四个通道,但第四个通道下得到的为空
使用numpy获取每个通道下的向量矩阵
np.array(g).reshape(1,84*225)[0]
np.array(b).reshape(1,84*225)[0]
np.array(k).reshape(1,84*225)[0]
注: 有时候上述np.array(g)的方法不能够顺利完成转换,会报错误:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'Image'
可转而使用下列方式进行转换
img = Image.open("/home/lw/a.jpg")
img.show()
img = np.array(img) # image类 转 numpy
vec= img[:,:,0] #第1通道
one=Image.fromarray(vec) # numpy 转 image类
one.show()
至此完成图片至向量的转换
图像的几何变换
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) #顺时针旋转
dst = im.transpose(Image.ROTATE_180)
dst = im.transpose(Image.ROTATE_270)# transpose()和rotate()没有性能差别。
3、图片平移
image = cv2.imread(image_path)
img_info = image.shape
height = img_info[0]
width = img_info[1]
mat_trans = np.float32([[1, 0, 20], [0, 1, 30]])
# [[1,0,20],[0,1,30]] 表示平移变换:其中20表示水平方向右的平移距离,30表示竖直方向下的平移距离。
# [[1,0,-20],[0,1,-30]] 表示平移变换:其中-20表示水平方向左的平移距离,-30表示竖直方向上的平移距离。
dst = cv2.warpAffine(image, mat_trans, (width, height)) # 变换函数
cv2.imwrite(save_path, dst)
向量与图片的转换
以cifar10为例,每张图片的向量矩阵为(32,32,3)
# img.shape = (32,32,3)
# img 保存的是其中一个样本的向量矩阵
img = Image.fromarray(img.astype('uint8')).convert('RGB')
plt.imshow(img) # 打印该图片
# 或者
img = Image.open("/home/lw/a.jpg")
img.show() # 会打开电脑的图片查看器显示图片
img = np.array(img) # image类 转 numpy
img =Image.fromarray(img ) # numpy 转 image类
img .show()
另可参考博客:
python处理图片
PIL官方
Python图像库PIL的类Image及其方法介绍
完