数据加载相关
前言图片的通道数、位深度单通道三通道四通道通道数之间的转化
二值化图像小结
灰度图像小结
pillow库相关全部代码
前言
首先我们都知道,图像是由一个个像素点组成的。图片在计算机中的存储方式为矩阵存储。我们要采用实验的方式来讲解二值化图像,灰度图像,彩色图像,以及对图片通道数的一些理解。我们首先使用pillow库来加载一张彩色图像
from PIL import Image
import numpy as np
im=Image.open('cat.jpg')
im
我们使用Image读入的图片不是一个数组,而是一个图片类(ImageFile)。即我们不能直接输出它的数值或形状。但是我们可以将它转化成为一个numpy数组再进行输出。
接下来,进入我们的实验环节。
图片的通道数、位深度
再讲各类图片之前,我们首先要明确图片的通道数。目前我们见到的图片一般是4通道,3通道,1通道。
位深度=通道数*每个通道所占位数。
单通道
我们所说的灰度图和二值化的图像都是单通道图片。
灰度图的位深度为1*8=8.二值化图像的位深度为1*1=1.
单通道图片,每个像素点的数值表示了黑的程度。
三通道
三通道是用的最多的一种图片了。三通道图的意思是每个像素点都有3个值表示 。位深度=3*8=24.
四通道
四通道图的意思是每个像素点都有4个值表示 ,所以就是4通道。其中4通道图片表示的是RGBA。RGBA是代表Red(红色)Green(绿色)Blue(蓝色)和Alpha。alpha通道,表示透明度,alpha=0表示全透明,alpha=255表示不透明。采用的颜色是RGB,可以属于任何一种RGB颜色空间。位深度=4*3=32. PNG是一种使用RGBA的图像格式。
通道数之间的转化
直接上代码
# 高通道数向低通道数转化
img_gray=img.convert('L') # 将四通道或三通道图片转化为灰度图
img_white=img.convert('1') # 将四通道,三通道,灰度图转化为二值化图片
#低通道数向高通道数转化,主要涉及到灰度图向RGB的转化。
img_color=img_gray.convert('RGB') # 灰度图向三通道图的转化注意这里输出的图片依然是灰色的,但是位深度已经达到24.
二值化图像
二值图像的意思,就是每个图像当中的每个像素点,只能取0或255,其中0为黑,255为白,即非黑即白。我们将我们的彩色图片转化为灰度图并输出。 我们使用im.convert('1')来将一张图片转化为二值化的图片。通过转化为np数组看到了二值化图片的真正面目。我们保存这张二值化图片img.save('dd.png'),查看它的详细信息。 我们可以看到,位深度为1,代表每个像素点用1位表示,即非1即0.这就是二值化图像的全部面目了。
小结
我们学会了 彩色图转二值化图片,二值化图片的查看和保存,
灰度图像
接下来我们查看cat_gray.png的详细信息
这印证了理论:灰度图是单通道的,且位深度为8。
小结
在这个小结中,我们学习了利用pillow库将彩色图片转化为灰度图片。并通过实验掌握了灰度图的原理。
pillow库
pillow是一个基于python的图像处理标准库。是延续PIL库的一个支持python3.x的一个库。包含了一些图像的处理操作。
相关全部代码
from PIL import Image
import numpy as np
im=Image.open('cat.jpg') # 加载图片。
im
im.shape # im是一个图片类,我们需要手动转化为tensor。
print(len(im.split()))
n_im=np.array(im)
n_im.shape
# 二值化相关
img = im.convert('1') # 图像二值化
img
img.save('cat_blackWhite.png')
n_img=np.array(img) # 图像转化为array
n_img
# 灰度图相关
img_gray=im.convert('L') # 将图像转化为灰度图
img_gray #展示图片
img_color=img_gray.convert('RGB') #将灰度图转化为RGB图。
img_color
img_color.save('grayToColor.png')
img_gray.save('cat_gray.png') #将图片保存
n_img_gray=np.array(img) # 将图片转为np数组
n_img_gray.shape
[1]关于图像的通道、深度等概念
[2]Pytorch中Tensor与各种图像格式的相互转化