简介:
首先介绍素描——使用单一色彩表现明度变化的绘画。
由素描的定义可显而易见,我们目标则是将图片转为灰度图,即单通道。
为了表现色彩的明度变化,我们可以在代码中增加一种光源效果,从而达到灰度变化以模拟视觉的远近效果
所需库:
from PIL import Image
import numpy as np
代码介绍:
1.获取图片灰度转入数组,方便接下的计算。
a=np.asarray(Image.open("2022.PNG").convert("L")).astype("float")
2.分别获取图像梯度值 进行归一化处理
depth=10
grad=np.gradient(a) #取图像灰度的梯度值
grad_x,grad_y=grad #分别取纵横向图像梯度值
grad_x=grad_x * depth/100.
grad_y=grad_y * depth/100.
3.归一化操作
A=np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.) #取平方根
uni_x=grad_x / A
uni_y=grad_y / A
uni_z=1. / A
4.添加光源效果,考虑光源对xyz轴影响,再用sin和cos函数进行计算(网上搜到的)
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轴的影响
5.计算新的像素值,并将像素值高于255,低于0的值筛出
b=255*(dx * uni_x