首先介绍素描——使用单一色彩表现明度变化的绘画。
由素描的定义可显而易见,我们目标则是将图片转为灰度图,即单通道。
为了表现色彩的明度变化,我们可以在代码中增加一种光源效果,从而达到灰度变化以模拟视觉的远近效果
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 +dy*uni_y+dz*uni_z) #光源归一化
b=b.clip(0,255) # 避免数据越界,将生成的灰度值裁剪至0-255之间
6.重构像素,保存图片
im=Image.fromarray(b.astype("uint8")) # 重构图像(将数组转化成图像)
im.save('2022_sumiao.jpg')
运行后会在同文件夹中直接保存
粘贴上面所有代码即可运行,大佬们可以用以此为延申来做素描画风的视频
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态