女朋友嘲笑我没有艺术气息,我不服!!一气之下我用python画素描人像

女朋友嘲笑我没有艺术气息,我不服!!一气之下我用python画素描人像

  • 写在前面
  • 代码实现
    • 需要安装的库
    • 安装库命令
    • 程序源码
  • 总结

写在前面

都说5月20日是网络情人节,作为程序员的李伟,平时忙着敲代码,难得有时间可以陪女朋友,然而却收来女朋友的一条消息。。
女朋友嘲笑我没有艺术气息,我不服!!一气之下我用python画素描人像_第1张图片
伟哥这仅有的几根头发多少有点绿光啊哈哈!!!心里想,哪能受得了这种气!!不就是艺术气息吗?伟哥疯狂敲了30行代码,将女朋友的照片一处理,直接发过去了。生活真不容易啊,程序员也得学素描。

照片处理之前 照片处理之后
女朋友嘲笑我没有艺术气息,我不服!!一气之下我用python画素描人像_第2张图片 女朋友嘲笑我没有艺术气息,我不服!!一气之下我用python画素描人像_第3张图片

废话不多说,直接上代码。

代码实现

需要安装的库

PIL  用于对图片的灰度处理
numpy  用于数据分析

安装库命令

pip install PIL
pip install numpy

程序源码

其中:

  1. beforeUrl指定你要处理的照片,如:D:\a.jpg
  2. afterUrl指定你处理完的照片的地址,如:D:\b.jpg
from PIL import Image
import numpy as np

def makeSketch(beforeUrl,afterUrl):
    a = np.asarray(Image.open(beforeUrl).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_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 轴的影响

    b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z)  # 光源归一化
    b = b.clip(0, 255)

    im = Image.fromarray(b.astype('uint8'))  # 重构图像
    im.save(afterUrl)
    
    
if __name__ == '__main__':
    beforeUrl = r'D:\1.jpg'
    afterUrl = r'D:\2.jpg'
    makeSketch(beforeUrl,afterUrl)

项目参考github开源项目,项目地址:https://github.com/stormdony/python_demo/blob/master/Pic_to_sketch/test.py

总结

其实照片是我的女朋友哈哈,但我可没被绿!总之,不管是学艺术也好,写程序也好,都有各自的浪漫之处,虽然有时候呈现的形式不一样,但爱是一样的,祝各位5.20都有所爱之人在身边。

你可能感兴趣的:(Python,python,数据分析,图像处理)