python numpy,用python进行图片素描

 2023-09-28 阅读 35 评论 0

摘要:简介: 首先介绍素描——使用单一色彩表现明度变化的绘画。 由素描的定义可显而易见,我们目标则是将图片转为灰度图,即单通道。 为了表现色彩的明度变化,我们可以在代码中增加一种光源效果,从而达到灰度变化以模拟视觉的远近效果 所需库&#x

简介:

首先介绍素描——使用单一色彩表现明度变化的绘画。

由素描的定义可显而易见,我们目标则是将图片转为灰度图,即单通道。

为了表现色彩的明度变化,我们可以在代码中增加一种光源效果,从而达到灰度变化以模拟视觉的远近效果

所需库:

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')

代码运行:

  运行后会在同文件夹中直接保存

结果展示:

 小结:

 粘贴上面所有代码即可运行,大佬们可以用以此为延申来做素描画风的视频

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/108097.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息