收藏文章 楼主

用Python生成你专属的素描头像

版块:编程开发   类型:普通   作者:小羊羔links   查看:533   回复:0   获赞:0   时间:2022-06-09 14:02:09

生活中我们也常常喜欢通过更换头像的方式,来表达自己的感受和心情,高兴时,难过时,每时每刻我们的头像都可以成为我们心情的代名词。

虽然我们不能使用一支铅笔,通过黑白线条的勾勒,描绘出一幅幅生动形象的人物形象。但是我们可以通过Python程序来完成。

首先我们需要执行以下命令安装需要的模块

pip install numpy

pip install pillow

安装完成后如图1所示。

 

图1  安装numpy

我们先导入安装的模块,并打开需要转换的图片,将其转换为灰度图,示例代码如下

01  from PIL import Image  # 图像处理模块

02  import numpy as np

03   

04  # 将图像以灰度图的方式打开并将数据转为float存入np中

05  a = np.asarray(Image.open("sucai.png").convert('L')).astype('float')

06  depth = 10.  # (0-100)

07  grad = np.gradient(a)  # 取图像灰度的梯度值

08  grad_x, grad_y = grad  # 分别取横纵图像梯度值

09  grad_x = grad_x * depth  100.

10  grad_y = grad_y * depth  100.

11   

12  A = np.sqrt(grad_x ** + grad_y ** 1.)

13  uni_x = grad_x A

14  uni_y = grad_y A

15  uni_z = 1. / A

然后我们再建立一个位于图像斜上方的虚拟光源,并计算图像中各点新的像素值,最后保存图片即可,代码如下

16  # 建立一个位于图像斜上方的虚拟光源

17  vec_el = np.pi  2.2  # 光源的俯视角度,弧度值

18  vec_az = np.pi  4.  # 光源的方位角度,弧度值

19  dx = np.cos(vec_el) * np.cos(vec_az)  # 光源对x 轴的影响

20  dy = np.cos(vec_el) * np.sin(vec_az)  # 光源对y 轴的影响

21  dz = np.sin(vec_el)  # 光源对z 轴的影响

22   

23  # 计算各点新的像素值

24  b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z)  # 光源归一化

25  b = b.clip(0255)  # clip函数将区间外的数字剪除到区间边缘

26  im = Image.fromarray(b.astype('uint8'))  # 重构图像

27   

28  # 保存图片

29  im.save("sucai_sketch.png")

素材转换后的对比图如下所示

今天的技巧你学会了吗?

更多技术干货,请持续 哦

小羊羔锚文本外链网站长https://seo-links.cn 
回复列表
默认   热门   正序   倒序

回复:用Python生成你专属的素描头像

Powered by 小羊羔外链网 8.3.11

©2015 - 2024 小羊羔外链网

免费发软文外链 鄂ICP备16014738号-6

您的IP:3.15.5.183,2024-04-19 21:20:11,Processed in 0.05565 second(s).

支持原创软件,抵制盗版,共创美好明天!
头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息