python-20行代码将图片转素描画(附源码和成品下载地址)
Posted 曲鸟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-20行代码将图片转素描画(附源码和成品下载地址)相关的知识,希望对你有一定的参考价值。
一、前言
用python画素描画的方式有很多种,
常见的有通过opencv、pil来进行转换
这里给大家分享通过pil实现图片转素描风格绘画的方式。
对人像的转换出来看就一般,对风景的转化看着还行。
大佬可优化一下算法。
二、效果
1.风景
原图:
转换后:
2.人像
原图:
转换后:
3.物品
原图:
转换后:
三、环境要求
1.python3+
2.numpy
3.pillow
四、源码分享
from PIL import Image
import numpy as np
import tkinter.filedialog
root = tkinter.Tk().withdraw()
filename = tkinter.filedialog.askopenfilename() # 打开选择文件对话框
try:
depth = 30 # 0-100,越高,颜色越深
picture_grad = np.gradient(np.asarray(Image.open(filename).convert('L')).astype('int')) # 取图像灰度的梯度值
grad_x, grad_y = picture_grad[0] * depth / 100., picture_grad[1] * depth / 100. # 将获取的维度梯度值进行深度处理
base = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.) # 降噪基
_x, _y, _z = grad_x / base, grad_y / base, 1. / base
sce_z, sce_x = np.pi / 2.1, np.pi / 3 # 光源的俯视角度值和方位角度值
# 光源对x,y,z 轴的影响
dx, dy, dz = np.cos(sce_z) * np.cos(sce_x), np.cos(sce_z) * np.sin(sce_x), np.sin(sce_z)
Normalized = 255 * (dx * _x + dy * _y + dz * _z).clip(0, 255) # 光源归一化
im = Image.fromarray(Normalized.astype('uint8')) # 重构图像
im.save('转换后的素描图.jpg') # 保存转换后的图片
im.show() # 展示转换后的图片
except Exception:
print('转换失败!')
五、成品分享
可直接运行版下载地址:
已经打包成exe文件了,Windows环境下可直接点击运行
百度网盘下载地址:https://pan.baidu.com/s/1iz3qKx7kLIIwFsOTujDxQg
提取码:1lb7
CSDN下载地址:https://download.csdn.net/download/momoda118/20719184
分享暂时到这里,小伙伴们点赞、收藏、评论是对我最大的支持!!
欢迎访问往期文章!
六、往期文章回顾
以上是关于python-20行代码将图片转素描画(附源码和成品下载地址)的主要内容,如果未能解决你的问题,请参考以下文章
Python大神教你300行代码搞定HTML模板渲染「附源码」
40行代码自己动手写pdf转word小工具(文末附工具下载)