一 图像的数组表示
通常使用RGB色彩模式,即每个像素点的颜色由红(R)、绿(G)、蓝(B)组成。
RGB三个颜色通道的变化和叠加得到各种颜色,其中:
R 红色,取值范围,255 ‐ 0
G 绿色,取值范围,255 ‐ 0
B 蓝色,取值范围,255 ‐ 0
RGB形成的颜色包括了人类视力所能感知的所有颜色。
二 PIL库
PIL即Python Image Library,是一个具有强大图像处理能力的第三方库.
在命令行下的安装方法:pip install pillow
PIL库支持图像存储、显示和处理,能处理几乎所有的图片图片格式,可以完成对图像的缩放,剪裁叠加以及向图
像添加线条,图像和文字等操作。主要实现功能如下:
(1)图像归档:批处理、生成图像预览、图像格式转换
(2)图像处理:基本处理、像素处理、颜色处理
根据功能不同,PIL库共包括21个与图片有关的类,这些库也看作子库。本文主要针对Iamge
三 图像的数组表示
from PIL import Image
import numpy as np
im=Image.open('E:\\test.jpg')
a=np.array(im)
print(a.shape,a.dtype)
(1263, 1749, 3) uint8
【注】图像是一个三维数组,维度分别是高度、宽度和像素RGB值
四 图像变换
from PIL import Image
import numpy as np
im=Image.open('E:\\test.jpg')
a=np.array(im)
b=[255,255,255]-a #变成相反的颜色
im=Image.fromarray(b.astype('uint8'))
im.save('E:\\test1.jpg')
from PIL import Image
import numpy as np
im=Image.open('E:\\test.jpg').convert(('L'))#convert变成黑白
a=np.array(im)
print(a.shape,a.dtype)
b=255-a #在对应的颜色通道减去他本身,形成黑白底片效果
im=Image.fromarray(b.astype('uint8'))
im.save('E:\\test2.jpg')
from PIL import Image
import numpy as np
im=Image.open('E:\\test.jpg').convert(('L'))
a=np.array(im)
b=(100/255)*a+150 #区间变换,生成颜色比较浅色的灰度图片
im=Image.fromarray(b.astype('uint8'))
im.save('E:\\test3.jpg')
from PIL import Image
import numpy as np
im=Image.open('E:\\test.jpg').convert(('L'))
a=np.array(im)
b=255*(a/255)**2 #像素平方,产生颜色较深的灰度图
im=Image.fromarray(b.astype('uint8'))
im.save('E:\\test4.jpg')
五 图像手绘效果
from PIL import Image
import numpy as np
a=np.array(Image.open('E:\\test.jpg').convert('L')).astype('float')
depth=10 #(0-100)
grad=np.gradient(a) #取图像灰度的梯度值
grad_x,grad_y=grad #分别取横纵图像的梯度值
grad_x=grad_x*depth/100.
grad_y=grad_y*depth/100.
A=np.sqrt(grad_x**2+grad_y**2+1.)
uni_x=grad_x/A
uni_y=grad_y/A
uni_z=1./A
vec_el=np.pi/2.2 #光源的俯视角度,弧度值
vec_az=np.pi/4 #光源的方位角度,弧度值
dx=np.cos(vec_el)*np.cos(vec_az) #光源对x轴的影响
dy=np.cos(vec_el)*np.sin(vec_az) #光源对y轴的影响
dz=np.sin(vec_el) #光源对z轴的影响
b=255*(dx*uni_x+dy*uni_y+dz*uni_z) #光源归一化
b=b.clip(0,255)
im=Image.fromarray(b.astype('uint8'))
im.save('E://tsetf.jpg')