图像的表示
图像的RGB色彩模式
RGB三个颜色通道的变化和叠加得到各种颜色,其中
- R红色,取值范围,0-255
- G绿色,取值范围,0-255
- B蓝色,取值范围,0-255
PIL库是一个具有强大图像处理能力的第三方库
from PIL import Image
图像是一个由像素组成的二维矩阵,每个元素是一个RGB值
from PIL import Image
import numpy as np
a = np.array(Image,open("..."))
print(a.shape, a.dtype)
图像的变换
读入图像后,获得像素RGB值,修改后保存为新的文件
from PIL import Image
import numpy as np
a = np.array(Image,open("...").convert('L')) #转化为灰度值
b = 255 - a
im = Image.fromarray(b.astype('uint8'))
im.save("...")
手绘效果
手绘效果的几个特征
- 黑白灰色
- 边界线条较重
- 相同或相近色彩趋于白色
- 略有光源效果
from PIL import Image
import numpy as np
a = np.asarray(Image.open('F://pic.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_e1 = np.pi / 2.2 #光源的俯视角度,弧度值
vec_ez = np.pi / 4. #光源的方位角度,弧度值
dx = np.cos(vec_e1) * np.cos(vec_ez) #光源对x轴的影响
dy = np.cos(vec_e1) * np.sin(vec_ez) #光源对y轴的影响
dz = np.sin(vec_e1) #光源对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('F://pic2.jpg')