python-20行代码将图片转素描画(附源码和成品下载地址)

简介: python-20行代码将图片转素描画(附源码和成品下载地址)

一、前言


用python画素描画的方式有很多种,

常见的有通过opencv、pil来进行转换

这里给大家分享通过pil实现图片转素描风格绘画的方式。

对人像的转换出来看就一般,对风景的转化看着还行。

大佬可优化一下算法。


二、效果


1.风景


原图:

1bd0dd889fe14f7286284f8fdaa9823a.jpg

转换后:

f668aa6376f74e419e55a66194e332a4.jpg


2.人像


原图:

12ede08233d349f0b77da1748eea79de.jpg

转换后:


2e4aa0c1aa194f35863b721135427668.jpg


3.物品


原图:3e156a2229ac4f4c9ad0bfb6126cc3a6.jpg

转换后:

7278328f3c74452cb6d05aafd15bea86.jpg


三、环境要求


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

目录
相关文章
|
1月前
|
Python
Python网络编程基础(Socket编程)绑定地址和端口
【4月更文挑战第9天】在UDP服务器编程中,我们首先需要创建一个UDP套接字,然后绑定一个本地地址和端口,以便客户端可以通过这个地址和端口与我们的服务器进行通信。下面,我们将详细讲解如何绑定地址和端口。
|
1天前
|
数据安全/隐私保护 Python
python 图片打水印 透明图片合并
python 图片打水印 透明图片合并
5 1
|
7天前
|
Ubuntu Python
在Ubuntu下载Python3.6 并建立软连接
在Ubuntu下载Python3.6 并建立软连接
12 0
|
8天前
|
Python
Python中赋值使地址一样的技术探究
Python中赋值使地址一样的技术探究
21 0
|
13天前
|
存储 索引 Python
python图片九宫格图片处理
本篇文章介绍了一个Python项目的实现,项目能够处理图片并将其组合成九宫格或四宫格,同时还具备音乐播放功能,对于初学者来说是一个可以进行实战学习的初级项目。
|
13天前
|
存储 计算机视觉 Python
python实现Gif图片的字符画
这是一个Python实战项目,旨在将GIF动态图转化为ASCII字符动画。项目适合有一定Python基础的学习者,主要使用os、imageio、PIL库。首先,代码导入所需库,然后通过PIL创建空白图片并添加文本。接着,程序读取GIF,拆分帧并转为字符画,存入“tmp”目录。同时,代码提供了清空“tmp”目录、将灰度值映射为ASCII字符、将图片处理成字符画的函数。此外,还有创建新画布和合成GIF的步骤。主函数调用这些模块,最终将ASCII字符画合并成GIF。项目展示了将动态图像转换为ASCII艺术的过程。
|
16天前
|
Python
python代码根据点坐标裁切图片
【4月更文挑战第19天】python代码根据点坐标裁切图片
27 2
|
21天前
|
Python
【Python笔记】pip intall -e命令:让你的工程直接使用开源包的源码,可断点调试,修改源码!
【Python笔记】pip intall -e命令:让你的工程直接使用开源包的源码,可断点调试,修改源码!
19 0
|
21天前
|
存储 Python
Python 基于列表实现的通讯录管理系统(有完整源码)
Python 基于列表实现的通讯录管理系统(有完整源码)
17 0
|
25天前
|
数据采集 Web App开发 开发者
探秘Python爬虫技术:王者荣耀英雄图片爬取
探秘Python爬虫技术:王者荣耀英雄图片爬取