>>>图像的数组表示
图像的RGB色彩模式【图像一般使用RGB色彩模式,即每个像素点的颜色由红(R)、绿(G)、蓝(B)组成】
RGB三个颜色通道的变化和叠加得到各种颜色,其中,它们的取值范围均在 0-255
叠加起来形成的颜色种类为 256^3
#PIL库
PIL库是一个具有强大图像处理能力的第三方库【如果使用Spyder,则已经安装好了】,命令行下的安装方法:pip install pillow
from PIL import Image
Image 是PIL库中代表一个图像的类(对象)
# 图像的数组表示
【图像是一个由像素组成的二维矩阵,每个元素是一个RGB值】
左图可以变成右图,右图是一个在X Y轴上形成的一个像素的阵列,每个像素都是一个RGB值,RGB值:(R,G,B)中每一个是一个字节, 因此图像是以三个字节作为元素形成的一个二维元素
from PIL import Image
import numpy as np
im = np.array(Image.open("C:/Users/Public/Pictures/Saved Pictures/favorite.jpg"))
#注意路径复制过来不能直接使用,需稍作修改,'\' 改为 '/' 或 '\\' 或 路径前加r
print(im.shape,im.dtype)
(700, 700, 3) uint8 #三维数组,分别是图像的 高度、宽度、像素RGB值,其中第三维元素RGB有三个元素,即R、G、B分别由unit8来表示
注意路径复制过来不能直接使用,需稍作修改,'\' 改为 '/' 或 '\\' 或 路径前加r,
因为在windows系统当中读取文件路径可以使用\,但是在python字符串中\有转义的含义,eg:'\n'代表换行,
所以我们需要采取一些方式使得\不被解读为转义字符
>>>图像的变换,【数组可经过运算进行变换,而图像由数组构成】
1)打开一个图像,然后进行RGB的运算
2)将运算后的数组再生成一个图像类型
3)将其保存为文件
1 from PIL import Image
2
3 import numpy as np
4
5 a = np.array(Image.open("C:/Users/Public/Pictures/Saved Pictures/structure.jpg")) #打开
6
7 print(a.shape,a.dtype)
8 (439, 658, 3) uint8
9
10 b = [225,225,225] -a #补值
11
12 im = Image.fromarray(b.astype('uint8')) #重新生成一个图像对象
13
14 im.save("C:/Users/Public/Pictures/Saved Pictures/structure2.jpg")#保存新图像
from PIL import Image
import numpy as np
a = np.array(Image.open("C:/Users/Public/Pictures/Saved Pictures/structure.jpg").convert('L'))
#调用PIL库中的convert('L'):将一个彩色值图片变为一个灰度值图片,则再生成的数组降为二维数组
b = 225-a
#c = (100/255)*a + 150 区间变换(当前图片做一个灰度压缩,再扩充区间范围)
#d = 255 * (a/255)**2 区间平方
im = Image.fromarray(b.astype('uint8'))
im.save("C:/Users/Public/Pictures/Saved Pictures/structure2.jpg")
b c
总结:可通过修改数组变换那一行代码实现图像的任意变换
【可是为什么要取补值】
#代码 print("早点睡觉不然会死掉!")